Points from the point tool

This Python example gets coordinates from the Point tool.

  • Note that VisIt does not really make the point tool available to users but it can be used to set plot and operator attributes. In this case, we make a clear Pseudocolor plot with a ThreeSlice operator. The ThreeSlice operator can have its location set via the Point tool. Once the plot is created, we make it clear and enable the point tool. We install a Python callback on the ThreeSlice operator attributes and record updates made to the coordinates in that object. We then return the coordinates to the user.
import time

class PointToolCoordinates(object):
    def __init__(self, db, var):
        super(PointToolCoordinates, self).__init__()
        self.db = db
        self.var = var
        self.coord = (0,0,0)
        self.waiting = False

    def getCoordinate(self):
        def invoke(atts, obj):
            if obj.waiting:
                a = ThreeSliceAttributes(1)
                obj.coord = (a.x, a.y, a.z)
                obj.waiting = False
        # Make a new clear plot.
        self.waiting = False
        OpenDatabase(self.db)
        AddPlot("Pseudocolor", self.var)
        pc = PseudocolorAttributes()
        pc.legendFlag = 0
        pc.opacity = 0
        pc.opacityType = pc.Constant
        SetPlotOptions(pc)
        AddOperator("ThreeSlice", 0)
        DrawPlots()

        # Enable the point tool
        EnableTool(0, 1)
        self.waiting = True
        RegisterCallback("ThreeSliceAttributes", invoke, self)

        while(self.waiting):
            time.sleep(0)

        # Disable the point tool
        EnableTool(0, 0)
        RegisterCallback("ThreeSliceAttributes")
        DeleteActivePlots()

        return self.coord

def printcoord(coord):
    print coord

def main():
    p = PointToolCoordinates("~/Development/data/noise.silo", "hardyglobal")
    for i in xrange(10):
        print "i=",i
        print p.getCoordinate()

main()