CPlot: a light plotter for arrays/pyTree

Preamble

CPlot is a simple plotter for arrays (as defined in Converter documentation) or for CGNS/python trees (pyTrees as defined in Converter/Internal documentation).

This module is part of Cassiopee, a free open-source pre- and post-processor for CFD simulations.

For use with the array interface, you have to import CPlot module:

import CPlot

For use with the pyTree interface:

import CPlot.PyTree as CPlot

List of functions

– Actions

CPlot.display(arrays[, dim, mode, …]) Display arrays.
CPlot.render() Force render.
CPlot.delete(list) Delete zones from plotter.
CPlot.add(arrays, no, array[, zoneName, …]) Add one zone to plotter.
CPlot.replace(arrays, no, array[, zoneName, …]) Replace arrays[no] by array.
CPlot.finalizeExport([action]) Finalize export for continuous export.

– Set / Get functions

CPlot.getState(mode) Return a state in plotter.
CPlot.getSelectedZone() Return the selected zone in plotter.
CPlot.getSelectedZones() Return the selected zones in plotter.
CPlot.getSelectedStatus(zone) Return the selected status of a zone in plotter.
CPlot.getActiveZones() Return the active (displayed) zones in plotter.
CPlot.getActiveStatus(zone) Return the active status of a zone in plotter.
CPlot.getActivePoint() Return the active (clicked) point in plotter.
CPlot.getActivePointIndex() Return the active (clicked) point index.
CPlot.getMouseState() Return mouse state (mouse position and button state).
CPlot.getKeyboard() Return the pressed keys.
CPlot.resetKeyboard() Reset the keyboard string.
CPlot.changeVariable() Change displayed variable.
CPlot.changeStyle() Change CPlot display style.
CPlot.changeBlanking() Change the blanking procedure.
CPlot.setState([dim, mode, scalarField, …]) Set CPlot state.
CPlot.setMode(mode) Set CPlot display mode.
CPlot.setSelectedZones(list) Set selected zones.
CPlot.unselectAllZones() Unselect all zones.

– Camera setting and motion

CPlot.lookFor() Look for selected zones.
CPlot.moveCamera(posCams[, posEyes, …]) Move posCam and posEye following check points.
CPlot.travelLeft([xr, N]) Travel posCam left.

– Set rendering informations in pyTree

CPlot.PyTree.addRender2Zone(t[, material, …]) Add a renderInfo node to a zone node.
CPlot.PyTree.addRender2PyTree(t[, slot, …]) Add a renderInfo node to a tree.
CPlot.PyTree.loadView(t[, slot]) Load a view stored in slot.

Contents

Keys in CPlot window

Must be pressed when CPlot window is active.

  • f: fit view to data.
  • Ctrl+f: switch between full screen and windowed mode.
  • Arrows or left mouse: move around.
  • Shift + Arrows or right mouse: strafe.
  • Ctrl + Arrows or Ctrl + left mouse: move your head.
  • Ctrl + right mouse: tilt your head.
  • Shift + left mouse: select zone.
  • Shift + Ctrl + left mouse: multiple select.
  • Ctrl + left mouse: Accurate select (click on node)
  • Shift + right mouse: deactivate zone.
  • Shift + double left mouse: center view.
  • o or left mouse: move up.
  • p or left mouse: move down.
  • 1 or Shift+1: display fields (switch variable next and previous).
  • Space bar: display mesh.
  • Shift+Space bar: display solid.
  • m or M: toggle between 2D and 3D mode.
  • z or Z: select zones one by one.
  • a or A: activate(show)/deactivate(hide) a selected zone.
  • l: look for selected zone.
  • i or I or Ctrl+i or Ctrl+I: change displayed i plane (structured zones).
  • j or J or Ctrl+j or Ctrl+J: change displayed j plane.
  • k or K or Ctrl+k or Ctrl+K: change displayed k plane.
  • q: quit.

Actions

CPlot.display(a, ...)

Display entity. Display function has a lot of optional options that can be specified as arguments.

Parameters:
  • a ([array, list of arrays] or [pyTree, base, zone, list of zones]) – input data
  • dim (int) – dimension of data. 1: 1D, 2: 2D, 3: 3D (default: 3)
  • mode (int or string) – display mode. 0 or ‘Mesh’: mesh, 1 or ‘Solid’: solid, 2 or ‘Render’: render, 3 or ‘Scalar’: scalar field, 4 or ‘Vector’: vector field (default: 0)
  • scalarField (int or string) – scalar field number or scalar field name (ex:’Density’)
  • vectorField1,2,3 (int or string) – vector field number or vector field name
  • displayInfo (int) – 0 means no info display (default: 1)
  • displayIsoLegend (int) – 0 means no iso legend display (default: 0)
  • meshStyle (int) – 0: white solid and red wireframe, 1: colored wireframe, 2: colored solid and wireframe, 3: cyan solid and black wireframe (default: 2)
  • solidStyle (int) – 0: blue, 1: colored by zone, 3: white, 4: colored by zone outlined (default: 1)
  • scalarStyle (int) – 0: banded, 1: banded+mesh, 2: lines, 3: lines+mesh (default: 0)
  • vectorStyle (int) – 0: RGB, 1: arrows, 2: lines
  • vectorDensity (float) – the density of vectors
  • vectorNormalize (0 or 1) – if 1, displayed vectors are normalized
  • vectorShowSurface (0 or 1) – if 1, display surface in vector mode (vectorStyle=1)
  • vectorShape (0 (3D arrows), 1 (Flat arrows), 2 (Tetra arrows)) – type of arrows for vectors (vectorStyle=1)
  • vectorProjection (0 or 1) – 1 of vectors are projected on surface
  • colormap (int) – 0: Blue2Red, 2: Green2Red, 4: Black2White, 6: White2Black, 8: Diverging (default: 0)
  • niso (int) – number of isos (default: 25)
  • isoEdges (float) – width of iso edges for scalar display (default: -1)
  • isoScales (list of string, int, float, float) – list of min and max of a variable [varName, niso, min, max] (default: [])
  • win (tuple of 2 ints) – (sizeWinX, sizeWinY) window size (default: 700,700)
  • posCam (tuple of 3 floats) – (x,y,z) camera position
  • posEye (tuple of 3 floats) – (x,y,z) eye position
  • dirCam (tuple of 3 floats) – (x,y,z) camera direction (default: 0,0,1)
  • viewAngle (float) – camera angle in degrees (default: 50.)
  • bgColor (int) – background color. 0-10 (default: 0)
  • shadow (int) – display shadows. 0-1 (default: 0)
  • dof (int) – depth of field smoothing. 0-1 (default: 0)
  • stereo (int) – 1 or 2 means red/cyan anaglyph (default: 0)
  • stereoDist (float) – distance between eyes for stereo
  • export (string) – file name for export
  • exportResolution (string) – resolution for export (“1200x900”)
  • zoneNames (list of strings) – optional list of zone names (same size as arrays, struct zones, then unstruct zones)
  • renderTags (list of strings) – optional list of render tags (same size as arrays, struct zones, then unstruct zones)
  • offscreen (int) – 1 means offscreen rendering (mesa), 2 means offscreen rendering (openGL) (default: 0)

Example of use:

# - display (array) -
import Generator as G
import CPlot
import Transform as T

a = G.cart((0,0,0),(1,1,1),(18,28,3))
CPlot.display(a, mode='mesh')

for i in range(360):
    a = T.rotate(a, (9, 14, 3.5), (0,0,1), 1.)
    CPlot.display(a)
# - display (pyTree) -
import Generator.PyTree as G
import CPlot.PyTree
import Transform.PyTree as T

a = G.cart((0,0,0),(1,1,1),(18,28,3))

for i in range(360):
    a = T.rotate(a, (9, 14, 3.5), (0,0,1), 1.)
    CPlot.PyTree.display(a)

CPlot.render()

Force rendering. Must be used after functions that don’t render (ex: add, delete, …).

Example of use:

# - render (array) -
import Generator as G
import CPlot

a = G.cart((0,0,0), (1,1,1), (10,10,10))
CPlot.display(a)
CPlot.render()
# - render (pyTree) -
import Generator.PyTree as G
import CPlot.PyTree

a = G.cart((0,0,0), (1,1,1), (10,10,10))
CPlot.PyTree.display([a])
CPlot.PyTree.render()

CPlot.delete(list)

Delete zones from plotter. This function does not render. Argument is either a list of zone numbers (struct zones then unstructured zones order) or a list of zone names if zoneNames argument has been provided before to display function.

Parameters:list (list of int or strings) – list of zone number or zone names

Example of use:

# - delete (array) -
import Generator as G
import CPlot
import time

a = G.cart( (0,0,0), (1,1,1), (10,10,10) )
b = G.cart( (11,0,0), (1,1,1), (10,10,10) )

CPlot.display([a,b]); time.sleep(1)
CPlot.delete([0]); CPlot.render(); time.sleep(1)
CPlot.delete(['S-Zone 1']); CPlot.render(); time.sleep(1)
# - delete (pyTree) -
import Generator.PyTree as G
import CPlot.PyTree as CPlot
import Converter.PyTree as C
import time

a = G.cart( (0,0,0), (1,1,1), (10,10,10) )
b = G.cartTetra( (11,0,0), (1,1,1), (10,10,10) )
c = G.cart( (0,11,0), (1,1,1), (10,10,10) )
t = C.newPyTree(['Base', a, b, c])

CPlot.display(t); time.sleep(1)
CPlot.delete(['Base/cartTetra']); CPlot.render(); time.sleep(1)

CPlot.add(A, ..., a)

Add/insert one array/zone in plotter. This function does not render.

For array interface:

CPlot.add(A, no, a)

no is the position of insertion of a in A. Replace also in A.

For the pyTree interface:

CPlot.add(A, nob, noz, a)

Insert or append a to the base nob, at position noz in the zone list. If noz=-1, append to end of list.

Parameters:
  • A (arrays, pyTree or list of zones) – input data
  • no (int) – position of zone to add in A
  • nob (int) – position of base of zone to add in A
  • noz (int) – position of zone to add in A
  • a (array or zone) – data to add

Example of use:

# - add (array) -
import Generator as G
import CPlot
import time

a = G.cart((0,0,0), (1,1,1), (30,30,30))
A = [a]
CPlot.display(A); time.sleep(1)

b = G.cart((30,0,0), (1,1,1), (30,30,30))
CPlot.add(A, 0, b); CPlot.render(); time.sleep(0.5)
# - add (pyTree) -
import Generator.PyTree as G
import Converter.PyTree as C
import CPlot.PyTree as CPlot
import time

a = G.cart((0,0,0), (1,1,1), (30,30,30))

t = C.newPyTree(['Base', a])
CPlot.display(t); time.sleep(1)

b = G.cart((30,0,0), (1,1,1), (30,30,30))
CPlot.add(t, 1, -1, b); CPlot.render(); time.sleep(1)

CPlot.replace(A, ..., a)

For array interface:

CPlot.replace(A, no, a)

Performs A[no]=a, keeping plotter coherent.

For pyTree interface:

CPlot.replace(A, nob, noz, a)

Performs t[2][nob][2][noz]=a, keeping plotter coherent. This function does not render.

Parameters:
  • A (arrays, pyTree or zones) – input data
  • no (int) – position of zone to add in A
  • nob (int) – position of base of zone to add in A
  • noz (int) – position of zone to add in A
  • a (array or zone) – data to add

Example of use:

# - replace (array) -
import Generator as G
import CPlot
import time

a = G.cart( (0,0,0), (1,1,1), (30,30,30) )
A = [a]
CPlot.display(A); time.sleep(1)

for i in range(10):
    b = G.cart( (i,0,0), (1,1,1), (30,30,30) )
    CPlot.replace(A, 0, b); CPlot.render(); time.sleep(0.1)

# - replace (pyTree) -
import Generator.PyTree as G
import CPlot.PyTree as CPlot
import Converter.PyTree as C
import time

a = G.cartTetra( (0,0,0), (1,1,1), (10,10,10) )
b = G.cartTetra( (11,0,0), (1,1,1), (10,10,10) )
c = G.cart( (0,11,0), (1,1,1), (10,10,10) )

t = C.newPyTree(['Base', a, b, c])
CPlot.display(t); time.sleep(2.)

d = G.cart( (11,11,0), (1,1,1), (10,10,10) )
CPlot.replace(t, 1, 0, d); CPlot.render(); time.sleep(1.)

CPlot.finalizeExport(action=0)

Finalize an export. Wait for the end of file writing (action=0) or in mpeg export, close the mpeg file (action=1). Must be called when doing offscreen rendering (offscreen=1 or 2 in display function).

Parameters:action (int) – if 0, means wait until file is written, if 1, means close mpeg file

Example of use:

# - display (array) -
# Offscreen using FBO
import CPlot
import Transform as T
import Geom as D

a = D.sphere((0,0,0), 1, N=200)

# Multi images
CPlot.display(a, offscreen=2, bgColor=1, mode=0, meshStyle=2,
              solidStyle=1, posCam=(0,6,0), export='one.png')
CPlot.finalizeExport() # wait for end of file write
for i in range(5):
    a = T.rotate(a, (0,0,0), (0,0,1), 1.)
    CPlot.display(a, offscreen=2, bgColor=1, mode=0, meshStyle=2,
              solidStyle=1, posCam=(0,6,0), export='one%d.png'%i)
    CPlot.finalizeExport() # wait for end of file write
import os; os._exit(0)

# Mpeg Movie
for i in range(50):
    a = T.rotate(a, (0,0,0), (0,0,1), 1.)
    CPlot.display(a, bgColor=1, mode=0,
                  solidStyle=1, posCam=(0,6,0), export='export.mpeg',
                  exportResolution='680x600', offscreen=2)
    CPlot.finalizeExport() # wait for end of file write
CPlot.finalizeExport(1) # close mpeg file
import os; os._exit(0)

Set / Get functions

CPlot.getState(stateName)

Return the specified state value as stored in plotter. Available stateName are the same as the display function arguments.

Parameters:stateName (string) – name of state to be retrieved

Example of use:

# - getState (array) -
import Generator as G
import CPlot

a = G.cart((0,0,0), (1,1,1), (5,5,5))
CPlot.display(a)

print('dim=',CPlot.getState('dim'))
print('mode=',CPlot.getState('mode'))
print('displayInfo=',CPlot.getState('displayInfo'))
print('meshStyle=',CPlot.getState('meshStyle'))
print('solidStyle=',CPlot.getState('solidStyle'))
print('isoEdges=',CPlot.getState('isoEdges'))
print('win=',CPlot.getState('win'))
print('posCam=',CPlot.getState('posCam'))
print('posEye=',CPlot.getState('posEye'))
print('dirCam=',CPlot.getState('dirCam'))
# - getState (pyTree) -
import Generator.PyTree as G
import CPlot.PyTree as CPlot

a = G.cart((0,0,0), (1,1,1), (5,5,5))
CPlot.display(a)

print('dim=',CPlot.getState('dim'))
print('mode=',CPlot.getState('mode'))
print('displayInfo=',CPlot.getState('displayInfo'))
print('meshStyle=',CPlot.getState('meshStyle'))
print('solidStyle=',CPlot.getState('solidStyle'))
print('isoEdges=',CPlot.getState('isoEdges'))
print('win=',CPlot.getState('win'))
print('posCam=',CPlot.getState('posCam'))
print('posEye=',CPlot.getState('posEye'))
print('dirCam=',CPlot.getState('dirCam'))

CPlot.getSelectedZone()

Return the currently selected zone. If none is selected, return -1. If multiple zones are selected, return the last selected zone.

Returns:no of selected zone
Return type:int

Example of use:

# - getSelectedZone (array) -
import Generator as G
import CPlot
import time

a = G.cart((0,0,0), (1,1,1), (5,5,5))
CPlot.display(a)

nz = -1
while nz == -1:
    nz = CPlot.getSelectedZone(); time.sleep(0.1)
print('One zone has been selected: %d.'%nz)

CPlot.getSelectedZones()

Return the list of selected zones. If none is selected, return [].

Example of use:

# - getSelectedZones (array) -
import Generator as G
import CPlot
import time

a1 = G.cart( (0,0,0), (1,1,1), (5,5,5) )
a2 = G.cart( (7,0,0), (1,1,1), (3,3,3) )
CPlot.display([a1, a2])

ret = []
while ret == []:
    ret = CPlot.getSelectedZones(); time.sleep(2.)
print('Zones have been selected: ', ret)

CPlot.getSelectedStatus(nz)

Return the selected status (1: selected, 0: not selected) of zone nz.

Parameters:nz (int) – zone number
Returns:status of zone (1: selected, 0: not selected)
Return type:int

Example of use:

# - getSelectedStatus (array) -
import Generator as G
import CPlot
import time

a1 = G.cart( (0,0,0), (1,1,1), (5,5,5) )
a2 = G.cart( (7,0,0), (1,1,1), (3,3,3) )
CPlot.display([a1, a2])

time.sleep(5.)
ret = CPlot.getSelectedStatus(0)
if ret == 1: print('Zone 0 is selected.')
else: print('Zone 0 is not selected.')

CPlot.getActiveZones()

Return the list of active (visible) zones.

Returns:list of zone numbers
Return type:list of ints

Example of use:

# - getActiveZones (array) -
import Generator as G
import CPlot
import time

a1 = G.cart( (0,0,0), (1,1,1), (5,5,5) )
a2 = G.cart( (7,0,0), (1,1,1), (3,3,3) )
CPlot.display([a1, a2])

time.sleep(5.)
ret = CPlot.getActiveZones()
print('Active zones: ', ret)

CPlot.getActiveStatus(nz)

Return the active status (1: active, 0: inactive) of zone nz. Active zones are visible, unactive zones are hidden.

Parameters:nz (int) – number of zone
Returns:active status of zone
Return type:int

Example of use:

# - getActiveStatus (array) -
import Generator as G
import CPlot
import time

a1 = G.cart( (0,0,0), (1,1,1), (5,5,5) )
a2 = G.cart( (7,0,0), (1,1,1), (3,3,3) )
CPlot.display([a1, a2])

time.sleep(5.)
ret = CPlot.getActiveStatus(0)
if ret == 1: print('Zone 0 is active.')
else: print('Zone 0 is inactive.')

CPlot.getActivePoint()

Return the last clicked point position (coordinates in 3D world) as a list of three coordinates.

Returns:active point position
Return type:tuple of 3 floats

Example of use:

# - getActivePoint (array) -
import Generator as G
import CPlot
import time

a = G.cart( (0,0,0), (1,1,1), (5,5,5) )
CPlot.display([a])

l = []
while l == []:
    l = CPlot.getActivePoint(); time.sleep(0.1)
print('ActivePoint: ', l)
#>> ActivePoint:  [3.9996489035268743, 2.127948294736359, 2.41771355073051]

CPlot.getActivePointIndex()

Return the active point index. For structured grids, return [ind, indc, i,j,k], where ind is the global index of the nearest node to active point, indc is the global index of the nearest center to active point and i,j,k are the indices of nearest node. For unstructured grids, return [ind, indc, no, 0, 0], where ind is the global index of nearest node, indc is the nearest center to the clicked point and no is the number of ind in the center2node connectivity of indc.

Returns:active point index
Return type:list of 4 ints

Example of use:

# - getActivePointIndex (array) -
import Generator as G
import CPlot
import time

a = G.cartTetra( (0,0,0), (1,1,1), (5,5,1) )
CPlot.display([a], dim=2)

l = []
while l == []:
    l = CPlot.getActivePointIndex(); time.sleep(0.1)
print('ActivePointIndex : ', l)
#>> ActivePointIndex :  [16, 19, 3, 0, 0]

CPlot.getMouseState()

Return the current button state of mouse (0: left pressed, 1: middle pressed, 2: right pressed, 5: not pressed) and the current mouse position (if pressed). Use it when dragging.

Returns:mouse state and mouse position
Return type:tuple of 2 ints

Example of use:

# - getMouseState (array) -
import Generator as G
import CPlot
import time

a = G.cartTetra( (0,0,0), (1,1,1), (5,5,1) )
CPlot.display([a], dim=2)

c = 1000
while c > 0:
    l = CPlot.getMouseState(); time.sleep(0.5)
    print(l)
    c -= 1

CPlot.getKeyboard()

Return the pressed keys as a string.

Returns:keys pressed in CPlot window
Return type:string

Example of use:

# - getKeyboard (array) -
import Generator as G
import CPlot
import Geom as D
import time

a = G.cart((0,0,0), (1,1,1), (8,8,1))
CPlot.display(a, dim=2)
CPlot.setState(activateShortCuts=0)

for i in range(50):
    l = ''
    while l == '':
        l = CPlot.getKeyboard(); time.sleep(0.1)
    l = CPlot.getKeyboard(); CPlot.resetKeyboard()
    try:
        a = D.text2D(l)
        CPlot.display(a)
    except:
        for i in range(len(l)):
            v = ord(l[i]); print(v)
            if v == 1: print('up')
            elif v == 2: print('down')
            elif v == 3: print('left')
            elif v == 4: print('right')
            elif v == 5: print('release up')
            elif v == 6: print('release down')
            elif v == 7: print('release left')
            elif v == 8: print('release right')
        time.sleep(0.1)
        l = ''

CPlot.resetKeyboard()

Reset the pressed key string stored in plotter.


CPlot.changeVariable()

Change displayed variable.

Example of use:

# - changeVariable (array) -
import Generator as G
import Converter as C
import CPlot
import time

def F(x,y): return x*x + y*y

a = G.cart((0,0,0), (1,1,1), (5,5,1))
a = C.addVars(a, 'Density')
a = C.initVars(a, 'F', F, ['x','y'])
CPlot.display(a, dim=2, mode=3)

CPlot.changeVariable(); time.sleep(2)
CPlot.changeVariable(); time.sleep(2)

CPlot.changeStyle()

Change CPlot display style.

Example of use:

# - changeStyle (array) -
import Generator as G
import CPlot
import time

a = G.cart((0,0,0), (1,1,1), (5,5,1))
CPlot.display(a, dim=2, mode=1)

CPlot.changeStyle(); time.sleep(2)
CPlot.changeStyle(); time.sleep(2)

CPlot.changeBlanking()

Change the blanking procedure.

Example of use:

# - changeBlanking (array) -
import Generator as G
import Converter as C
import CPlot
import time

a = G.cart((0,0,0), (1,1,1), (5,5,1))
a = C.initVars(a, 'cellN', 0)
CPlot.display(a, dim=2, mode=0)

CPlot.changeBlanking(); time.sleep(2)
CPlot.changeBlanking(); time.sleep(2)


CPlot.setState(dim, mode, ...)

Set a CPlot state. The same keywords as display can be used.

Additional keywords are:

  • ghostifyDeactivatedZones: 1 means deactivated zones will appear blended.
  • edgifyActivatedZones: 1 means activated zones will appear as edges.
  • edgifyDeactivatedZones: 1 means deactivated zones will appear as edges.
  • message: “A string” or “Clear”
  • viewAngle: the camera angle (default: 50 degrees).
  • cursor: mouse cursor type (0: normal, 1: cross, 2: wait).
  • lightOffset: offset to default light position (default: (0,0)).
  • dofPower: power of depth of field effect (default: 3.).
  • gamma: gamma correction (default: 1.).
  • sobelThreshold: sobel threshold for zone outlines (default: -0.5).
  • selectionStyle: style for selection (default: 0).
  • activateShortCut: if False, deactivate shortCut keys (def: True).
  • billBoards: list of billboard image files [‘file.png’,1,1] (default: None).
  • billBoardSize: size of billboard. If -1, use distance to fit billboards (default: -1).
  • materials: list of material image files used in textured rendering [‘mat.png’] (default: None).

Example of use:

# - setState (array) -
import Generator as G
import CPlot
import time

a = G.cart((0,0,0), (1,1,1), (5,5,5))
CPlot.display(a, mode='solid')
time.sleep(1.)
CPlot.setState(posCam=(8,8,8), posEye=(5,5,5))

CPlot.setMode(mode)

Set CPlot display mode (0 or ‘Mesh’: means mesh, 1 or ‘Solid’: means solid, 2 or ‘Render’: means render, 3 or ‘Scalar’ means scalar field, 4 or ‘Vector’ means vector fields)

Parameters:mode (int or string) – mode to set

Example of use:

# - setMode (array) -
import Generator as G
import CPlot
import time

a = G.cart((0,0,0), (1,1,1), (5,5,1))
CPlot.display(a, mode=0, dim=2); time.sleep(2)
CPlot.setMode(1); time.sleep(2) # solid
CPlot.setMode('mesh'); time.sleep(2)
CPlot.setMode('solid'); time.sleep(2)

CPlot.setSelectedZones(list)

Set the selected zone status (1: selected, 0: not selected) by zone global number.

Parameters:list (list of tuples of 2 ints) – list of zone number and status

Example of use:

# - setSelectedZones (array) -
import Generator as G
import CPlot
import time

a1 = G.cart( (0,0,0), (1,1,1), (5,5,5) )
a2 = G.cart( (7,0,0), (1,1,1), (3,3,3) )
CPlot.display([a1, a2])

time.sleep(1.)
CPlot.setSelectedZones([(0,1), (1,1)])

CPlot.unselectAllZones()

Unselect all zones.

Example of use:

# - unselectAllZones (array) -
import Generator as G
import CPlot
import time

a1 = G.cart( (0,0,0), (1,1,1), (5,5,5) )
a2 = G.cart( (7,0,0), (1,1,1), (3,3,3) )
CPlot.display([a1, a2])

time.sleep(2.)
CPlot.unselectAllZones()

CPlot.setActiveZones(list)

Set the active (visible) status for given zones.

Parameters:list (list of tuples of 2 ints) – list of zone number and status

Example of use:

# - setActiveZones (array) -
import Generator as G
import CPlot
import time

a1 = G.cart( (0,0,0), (1,1,1), (5,5,5) )
a2 = G.cart( (7,0,0), (1,1,1), (3,3,3) )
CPlot.display([a1, a2])

time.sleep(1.)
CPlot.setActiveZones([(0,0), (1,0)])

CPlot.setZoneNames(list)

Set the specified zone names.

Parameters:list (list of tuples of int and string) – list of zone number and zone names

Example of use:

# - setZoneNames (array) -
import Generator as G
import CPlot
import time

a1 = G.cart( (0,0,0), (1,1,1), (5,5,5) )
a2 = G.cart( (7,0,0), (1,1,1), (3,3,3) )
CPlot.display([a1, a2])

time.sleep(1.)
CPlot.setZoneNames([(0,'FirstZone'), (1,'SecondZone')])

Camera setting and motion

CPlot.lookFor()

Look for selected zone. It positions the camera for a clear view on the currently selected zone.

Example of use:

# - lookFor (array) -
import Generator as G
import CPlot

a = G.cart((0,0,0), (1,1,1), (5,5,5))
CPlot.display(a)
CPlot.lookFor()

CPlot.moveCamera(posCams, posEyes=None, dirCams=None, moveEye=False, N=100, speed=1., pos=-1)

Move camera along camera points. The list of points specifies the path of the camera. The camera will move along this path, making N steps. pos will position the camera at step number pos along the path. If posEyes is specified, posEye (that is the position the camera is looking to) will follow this path. If posEyes is not specified and moveEye is true, the posEye will follow the path Otherwise, the posEye will stay at initial posEye.

Parameters:
  • posCams (list of tuple of 3 floats or 1D STRUCT Zone) – coordinates of camera points
  • posEyes (list of tuple of 3 floats or 1D STRUCT Zone) – coordinates of eyes points
  • dirCams (list of tuple of 3 floats or 1D STRUCT Zone) – camera directions
  • moveEye (Boolean) – if True, the eye follow camera points
  • speed (float) – speed of camera motion
  • pos – position in posCams (in 0,N)
  • pos – int

Example of use:

# - moveCamera (array) -
import Geom as D
import Converter as C
import Transform as T
import CPlot

# Model
a = D.sphere((0,0,0), 1., N=20)
CPlot.display(a, posCam=(3,-1,0.7), posEye=(0,0,0))

t = 0.
for i in range(1000):
    # change model
    defo = C.initVars(a, '{df}=0.1*cos(%f)*sin(10*pi*{x})'%(t))
    defo = C.extractVars(defo, ['df'])
    b = T.deformNormals(a, defo)
    # Move camera
    CPlot.moveCamera([(3,-1,0.7),(3,5,0.7),(3,7,0.7)], N=1000, pos=i)
    CPlot.display(b)
    t += 0.05
# - moveCamera (pyTree) -
import Geom.PyTree as D
import CPlot.PyTree as CPlot
import Converter.PyTree as C
import Transform.PyTree as T
import Generator.PyTree as G

# Model
a = D.sphere((0,0,0), 1., N=20)
a = C.convertArray2Hexa(a); a = G.close(a)
CPlot.display(a, posCam=(3,-1,0.7), posEye=(0,0,0))

t = 0.
for i in range(1000):
    # change model
    C._initVars(a, '{df}=0.1*cos(%f)*sin(10*pi*{CoordinateX})'%(t))
    b = T.deformNormals(a, 'df')
    # Move camera
    CPlot.moveCamera([(3,-1,0.7),(3,5,0.7),(3,7,0.7)], N=1000, pos=i)
    CPlot.display(b)
    t += 0.05

CPlot.travelLeft(xr, N=100)

Travel camera left/Right/Up/Down/In/Out. Xr is the range (in 0.,1.). N is the number of check points.

Example of use:

# - travel* (array) -
import Geom as D
import Generator as G
import CPlot
import Converter as C
import Transform as T

# Model
a = D.sphere((0,0,0), 1., N=20)
a = C.convertArray2Hexa(a); a = G.close(a)
CPlot.display(a, posCam=(3,0,0), posEye=(0,0,0))

t = 0.
for i in range(1300):
    # change model
    defo = C.initVars(a, '{df}=0.1*cos(%f)*sin(10*pi*{x})'%(t))
    defo = C.extractVars(defo, ['df'])
    b = T.deformNormals(a, defo)
    CPlot.display(b)
    t += 0.05

    if i < 200: CPlot.travelLeft(0.001, N=3)
    elif i < 400: CPlot.travelRight(0.001, N=3)
    elif i < 600: CPlot.travelUp(0.001, N=3)
    elif i < 800: CPlot.travelIn(0.001, N=3)

# - travel* (array) -
import Geom as D
import Generator as G
import CPlot
import Converter as C
import Transform as T

# Model
a = D.sphere((0,0,0), 1., N=20)
a = C.convertArray2Hexa(a); a = G.close(a)
CPlot.display(a, posCam=(3,0,0), posEye=(0,0,0))

t = 0.
for i in range(1300):
    # change model
    defo = C.initVars(a, '{df}=0.1*cos(%f)*sin(10*pi*{x})'%(t))
    defo = C.extractVars(defo, ['df'])
    b = T.deformNormals(a, defo)
    CPlot.display(b)
    t += 0.05

    if i < 200: CPlot.travelLeft(0.001, N=3)
    elif i < 400: CPlot.travelRight(0.001, N=3)
    elif i < 600: CPlot.travelUp(0.001, N=3)
    elif i < 800: CPlot.travelIn(0.001, N=3)

Set rendering informations in pyTree

CPlot.PyTree.addRender2Zone(a, material=None, color=None, blending=None, meshOverlay=None, shaderParameters=None)

Add rendering info to a zone. Info are added in a .RenderInfo user defined node. Use Render mode in display for rendering effects. Exists also as in place version (_addRender2Zone) that modifies a and returns None. Shader parameters are described in shaderSettings.

Parameters:
  • a (zone node) – input zone
  • material (string) – material to set (in ‘Solid’, ‘Flat’, ‘Glass’, ‘Chrome’, ‘Metal’, ‘Wood’, ‘Marble’, ‘Granite’, ‘Brick’, ‘XRay’, ‘Cloud’, ‘Gooch’, ‘Sphere’)
  • color (string) – color to set (in ‘White’, ‘Grey’, … or ‘#FFFF’)
  • blending (float) – opacity factor (in [0.,1.])
  • meshOverlay (0 or 1) – if 1 then overlay the mesh
  • shaderParameters (list of two floats) – two float that parametrize shaders

Example of use:

# - addRender2Zone (pyTree) -
import Converter.PyTree as C
import Generator.PyTree as G
import CPlot.PyTree as CPlot

a = G.cart((0,0,0), (1,1,1), (10,10,1))
C._initVars(a, '{Density}={CoordinateX}')
C._initVars(a, '{centers:VelocityX}={centers:CoordinateY}')
# With a material
a = CPlot.addRender2Zone(a, material='Glass', color='Blue', blending=1.,
                         meshOverlay=1, shaderParameters=[1.,1.])
# With field
a = CPlot.addRender2Zone(a, material='Solid', color='Iso:Density', blending=1.,
                         meshOverlay=1, shaderParameters=[1.,1.])
# With field+material
a = CPlot.addRender2Zone(a, material='Chrome', color='Iso:centers:VelocityX', blending=1.,
                         meshOverlay=1, shaderParameters=[1.,1.])

C.convertPyTree2File(a, 'out.cgns')

CPlot.PyTree.addRender2PyTree(a, slot=0, posCam=None, posEye=None, dirCam=None, mode=None, scalarField=None, niso=None, isoScales=None, isoEdges=None, isoLight=None, colormap=None, materials=None, bumpMaps=None, billBoards=None)

Add rendering info to a tree. Info are added in a .RenderInfo user defined node. To load the settings to the view, call explicitely CPlot.loadView. Exists also as in place version (_addRender2PyTree) that modifies a and returns None.

Parameters:
  • a (pyTree) – input tree
  • slot (int) – the slot number
  • posCam (list of 3 floats) – camera position
  • posEye (list of 3 floats) – eye position
  • dirCam (list of 3 floats) – camera direction
  • materials (list of image file names used for texture mapping) – list of strings
  • bumpMaps (list of image file names used for bump mapping) – list of strings
  • billboards – list of strings

Example of use:

# - addRender2PyTree (pyTree) -
import Converter.PyTree as C
import CPlot.PyTree as CPlot
import Generator.PyTree as G

a = G.cart((0,0,0), (1,1,1), (10,10,1))
t = C.newPyTree(['Base', a])
# isoScales specify field no, niso for this field, min, max for this field
t = CPlot.addRender2PyTree(t, slot=0, posCam=(1,1,1), posEye=(10,1,1),
                           mode='Solid', niso=10, isoScales=[0, 10, 0., 1.],
                           isoEdges=0.1, isoLight=1, colormap='Blue2Red')
C.convertPyTree2File(t, 'out.cgns')

CPlot.PyTree.loadView(a, slot=0)

Load a view defined in a slot to the plotter. A view must already have been stored in pyTree a using CPlot.addRender2PyTree.

Parameters:
  • a (pyTree) – input tree
  • slot (int) – number of slot to load

Example of use:

# - loadView (pyTree) -
import Converter.PyTree as C
import CPlot.PyTree as CPlot
import Generator.PyTree as G

a = G.cart( (0,0,0), (1,1,1), (10,10,1) )
t = C.newPyTree(['Base', 2, a])

# isoScales specify field no, niso for this field, min, max for this field
t = CPlot.addRender2PyTree(t, slot=0, posCam=(1,1,1), posEye=(10,1,1),
                           mode='Solid', niso=10, isoScales=[0, 10, 0., 1.],
                           isoEdges=0.1, isoLight=1, colormap='Blue2Red')

CPlot.display(t)
import time; time.sleep(0.1)
CPlot.loadView(t, slot=0)

Shader settings

Shaders can be adjusted with the two parameters of the addRender2Zone function.

Here are the meaning of each parameters for each shader:

  • Solid: [1] SpecularFactor; [2] diffuseFactor
  • Flat: [1] None; [2] None
  • Glass: [1] mix; [2] mix2
  • Chrome: [1] mix color/envmap; [2] base color intensity
  • Metal: [1] reflection intensity; [2] bump size
  • Wood: [1] ray size, [2] bump height
  • Marble: [1] ray size, [2] None
  • Granite: [1] bump size; [2] Bump height
  • Brick: [1] brick size; [2] color width
  • XRay: [1] fall off; [2] color modifier
  • Cloud: [1] Size; [2] None
  • Gooch : [1] width; [2] shinyness
  • Sphere: [1] size of sphere; [2] type of billboard