def apply(self): """setup current lightmodel for current OpenGL context""" if self.ambient is not None: GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, self.ambient); if self.localViewer is True: GL.glLightModelf(GL.GL_LIGHT_MODEL_LOCAL_VIEWER, GL.GL_TRUE); elif self.localViewer is False: GL.glLightModelf(GL.GL_LIGHT_MODEL_LOCAL_VIEWER, GL.GL_FALSE); if self.twoSide is True: GL.glLightModelf(GL.GL_LIGHT_MODEL_TWO_SIDE, GL.GL_TRUE); elif self.twoSide is False: GL.glLightModelf(GL.GL_LIGHT_MODEL_TWO_SIDE, GL.GL_FALSE);
def Set(self, **kw): """Set various light model parameters""" self.viewer.currentCamera.Activate() tagModified = True val = getkw(kw, 'tagModified') if val is not None: tagModified = val assert tagModified in [True, False] self._modified = tagModified ambi = getkw(kw, 'ambient') if not ambi is None: if len(ambi)==3 or len(ambi)==4: self.ambient = OneColor( ambi ) GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, self.ambient); else: raise ValueError('length of new color must be 3 or 4') localViewer = getkw(kw, 'localViewer') if not localViewer is None: if localViewer in (True,1): GL.glLightModelf(GL.GL_LIGHT_MODEL_LOCAL_VIEWER, GL.GL_TRUE); elif localViewer in (False,0): GL.glLightModelf(GL.GL_LIGHT_MODEL_LOCAL_VIEWER, GL.GL_FALSE); else: raise AttributeError('localViewer can only be True or False') self.localViewer = localViewer twoSide = getkw(kw, 'twoSide') if not twoSide is None: if twoSide in (True,1): GL.glLightModelf(GL.GL_LIGHT_MODEL_TWO_SIDE, GL.GL_TRUE); elif twoSide in (False,0): GL.glLightModelf(GL.GL_LIGHT_MODEL_TWO_SIDE, GL.GL_FALSE); else: raise AttributeError('twoSide can only be True or False') self.twoSide = twoSide self.broadcast() if len(kw): print 'WARNING8: Keyword(s) %s not used' % kw.keys()
def setupLightModel(self): """ """ if __debug__: if hasattr(DejaVu, 'functionName'): DejaVu.functionName() # this method has to be called explicitly by the derived classes if # a default lighting model is wanted GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, [1.0, 1.0, 1.0, 0.0]) GL.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT1, GL.GL_SPECULAR, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, [-1.0, 1.0, 1.0, 0.0]) GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) #GL.glEnable(GL.GL_LIGHTING) if self.viewer is not None: self.viewer.enableOpenglLighting() GL.glEnable(GL.GL_LIGHT0) GL.glEnable(GL.GL_LIGHT1)
def setupLightModel(self): """ """ if __debug__: if hasattr(DejaVu, 'functionName'): DejaVu.functionName() # this method has to be called explicitly by the derived classes if # a default lighting model is wanted GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, [1.0, 1.0, 1.0, 0.0]); GL.glLightfv(GL.GL_LIGHT1, GL.GL_AMBIENT, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT1, GL.GL_SPECULAR, [.5, .5, .5, 1.0]) GL.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, [-1.0, 1.0, 1.0, 0.0]); GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) #GL.glEnable(GL.GL_LIGHTING) if self.viewer is not None: self.viewer.enableOpenglLighting() GL.glEnable(GL.GL_LIGHT0) GL.glEnable(GL.GL_LIGHT1)
def Set(self, **kw): """ set light values. For direction, position, and spot direction, vals are given in absolute coordinates (independent of camera or object). For these three values, the flag is set to 1 when they are changed. """ #print "Light.Set" self.hasBeenCurrent = True # remember the light has been changed tagModified = True val = getkw(kw, 'tagModified') if val is not None: tagModified = val assert tagModified in [True, False] self._modified = tagModified self.viewer.currentCamera.Activate() val = getkw(kw, 'ambient') if not val is None: #self.ambient = OneColor( val ) #GL.glLightfv(self.num, GL.GL_AMBIENT, self.ambient ) if len(val)==3 or len(val)==4: self.ambient = OneColor( val ) GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, self.ambient) GL.glLightfv(self.num, GL.GL_AMBIENT, self.ambient) # needed for mesa else: raise ValueError('length of new color must be 3 or 4') val = getkw(kw, 'diffuse') if not val is None: self.diffuse = OneColor( val ) GL.glLightfv(self.num, GL.GL_DIFFUSE, self.diffuse ) val = getkw(kw, 'specular') if not val is None: self.specular = OneColor( val ) GL.glLightfv(self.num, GL.GL_SPECULAR, self.specular ) val = getkw(kw, 'direction') if not val is None: val = list(val) if len(val)==3: val += [0.] assert len(val)==4 self.direction = val self.direction[3] = 0.0 self.dirFlag = 1 # tell the camera to redraw this light self.positional = False val = getkw(kw, 'position') if not val is None: val = list(val) if len(val)==3: val += [1.] assert len(val)==4 self.position = val self.position[3] = 1.0 self.posFlag = 1 # tell the camera to redraw this light self.positional = True val = getkw(kw, 'spotDirection') if not val is None: val = list(val) if len(val)==3: val += [0.] assert len(val)==4 self.spotDirection = val self.spotDirection[3] = 0.0 self.spotFlag = 1 # tell the camera to redraw this light val = getkw(kw, 'spotExponent') if not val is None: self.spotExponent = float(val) GL.glLightfv(self.num, GL.GL_SPOT_EXPONENT, [self.spotExponent]) val = getkw(kw, 'spotCutoff') if not val is None: if val > 180.: raise ValueError("spotCutoff must be in [0., 90.] or 180.") self.spotCutoff = float( val ) GL.glLightfv(self.num, GL.GL_SPOT_CUTOFF, [self.spotCutoff] ) val = getkw(kw, 'constantAttenuation') if not val is None: self.constantAttenuation = float( val ) if self.constantAttenuation < 0.0: raise ValueError("constantAttenuation must be >= 0.0") GL.glLightfv(self.num, GL.GL_CONSTANT_ATTENUATION, [self.constantAttenuation] ) val = getkw(kw, 'linearAttenuation') if not val is None: self.linearAttenuation = float( val ) if self.linearAttenuation < 0.0: raise ValueError("linearAttenuation must be >= 0.0") GL.glLightfv(self.num, GL.GL_LINEAR_ATTENUATION, [self.linearAttenuation] ) val = getkw(kw, 'quadraticAttenuation') if not val is None: self.quadraticAttenuation = float( val ) if self.quadraticAttenuation < 0.0: raise ValueError("quadraticAttenuation must be >= 0.0") GL.glLightfv(self.num, GL.GL_QUADRATIC_ATTENUATION, [self.quadraticAttenuation] ) val = getkw(kw, 'positional') if not val is None: if val is True: self.position[3] = 1.0 elif val is False: self.position[3] = 0.0 else: raise AttributeError('positional can only be True or False') self.positional = val val = getkw(kw, 'enabled') if not val is None: if val in (True, 1): GL.glEnable(self.num) elif val in (False, 0): GL.glDisable(self.num) else: raise AttributeError('enabled can only be True or False') self.enabled = val val = getkw(kw, 'visible') if not val is None: if val in (True, False): self.visible = val else: raise AttributeError('visible can only be True or False') val = getkw(kw, 'lineWidth') if not val is None: if val >= 1: self.lineWidth = int(val) else: raise AttributeError('lineWidth has to be >= 1') val = getkw(kw, 'length') if not val is None: if val > 0.0: self.length = float ( val ) else: raise AttributeError('length has to be > 0.0') # val = getkw(kw, 'antialiased') # if not val is None: # if val in (True, False): # self.antialiased = val # else: raise ValueError ('antialiased can only be True or False') val = getkw(kw, 'rotation') if not val is None: mat = Numeric.reshape(Numeric.array(val), (16,)).astype('f') self.rotation = mat val = getkw(kw, 'translation') if not val is None: mat = Numeric.reshape(Numeric.array(val), (3,)).astype('f') self.translation = mat val = getkw(kw, 'scale') if not val is None: mat = Numeric.reshape(Numeric.array(val), (3,)).astype('f') self.scale = mat val = getkw(kw, 'pivot') if not val is None: mat = Numeric.reshape(Numeric.array(val), (3,)).astype('f') self.pivot = mat if len(kw): print 'WARNING9: Keyword(s) %s not used' % kw.keys() #guillaume vareille 9/29/2005 : # was c = self.viewer.cameras[0] # was generating alternativly good and wrong rendering when 2 cameras c = self.viewer.currentCamera # force light to be update in viewer c.Redraw() # brodcast to other application that want to know about that light # using aftere does not seem to make it better #c.after_idle(self.broadcast) self.broadcast()