def __init__(self, screensize=(800, 600), fullscreen=False, caption="Topology Viewer", particleTypes=None, initialTopology=None, laws=None, simCyclesPerRedraw=1, border=0, extraDrawing=None, showGrid=True, transparency=None, position=None): """x.__init__(...) initializes x; see x.__class__.__doc__ for signature""" super(TopologyViewer3D, self).__init__() glutInit(sys.argv) tracker = _cat.coordinatingassistanttracker.getcat() self.display = OpenGLDisplay(width=screensize[0], height=screensize[1], fullscreen=fullscreen, title=caption) self.display.activate() OpenGLDisplay.setDisplayService(self.display, tracker) self.link((self, "display_signal"), (self.display, "notify")) self.link((self.display, "signal"), (self, "control")) self.border = border if particleTypes == None: self.particleTypes = { "-": CuboidParticle3D, "cuboid": CuboidParticle3D, "sphere": SphereParticle3D, "teapot": TeapotParticle3D } else: self.particleTypes = particleTypes self.hitParticles = [] self.multiSelectMode = False self.selectedParticles = [] self.grabbed = False self.rotationMode = False if laws == None: self.laws = Kamaelia.Support.Particles.SimpleLaws(bondLength=2) else: self.laws = laws self.physics = ParticleSystemX(self.laws, [], 0) self.biggestRadius = 0 # Do interaction self.simCyclesPerRedraw = simCyclesPerRedraw self.lastIdleTime = time.time() # Tell if new node is added; if true, new id needs adding to OpenGLDisplay list self.isNewNode = False # For hierarchy structure self.maxLevel = 0 self.currentLevel = 0 self.currentParentParticleID = '' self.viewerOldPos = Vector() self.levelViewerPos = {} self.currentDisplayedPhysics = ParticleSystemX(self.laws, [], 0) # For double click self.lastClickPos = (0, 0) self.lastClickTime = time.time() self.dClickRes = 0.3