diff --git a/modules/base/pymod/export_logger.cc b/modules/base/pymod/export_logger.cc index 446d041166e3695c7a63578ff223ef966e78f2fb..3b8b4b6615495c03bc809aaa013bc11d505b10ed 100644 --- a/modules/base/pymod/export_logger.cc +++ b/modules/base/pymod/export_logger.cc @@ -132,7 +132,16 @@ object log_verbose(tuple args, dict kwargs) LOG_VERBOSE(args_to_string(args, kwargs)); return object(); } - +object log_debug(tuple args, dict kwargs) +{ + LOG_DEBUG(args_to_string(args, kwargs)); + return object(); +} +object log_trace(tuple args, dict kwargs) +{ + LOG_TRACE(args_to_string(args, kwargs)); + return object(); +} void reset_sinks() { @@ -177,6 +186,8 @@ void export_Logger() def("LogInfo", raw_function(log_info, 1)); def("LogScript", raw_function(log_script, 1)); def("LogVerbose", raw_function(log_verbose, 1)); + def("LogDebug", raw_function(log_debug, 1)); + def("LogTrace", raw_function(log_trace, 1)); // this relatively ugly construct is required to work around a problem with // the "ost" command-line interpreter. If we don't remove all the sinks from diff --git a/modules/gfx/src/shader.cc b/modules/gfx/src/shader.cc index f567fdceb8d772e10e4feb00ada86e9fd719f143..2a5e91ce25fa41c121ae12ecca5a6a2f08a82e68 100644 --- a/modules/gfx/src/shader.cc +++ b/modules/gfx/src/shader.cc @@ -85,13 +85,13 @@ bool Shader::Compile(const std::string& shader_name, GLint sh_compiled; glGetShaderiv(shader_id, GL_COMPILE_STATUS, &sh_compiled); if(sh_compiled==GL_TRUE) { - LOG_VERBOSE("shader [" << shader_name << "] successfully compiled (" << shader_id << ")"); + LOG_DEBUG("shader [" << shader_name << "] successfully compiled (" << shader_id << ")"); } else { GLint sh_log_length; glGetShaderiv(shader_id, GL_INFO_LOG_LENGTH, &sh_log_length); std::vector<GLchar> sh_log(sh_log_length+1); glGetShaderInfoLog(shader_id, sh_log_length, NULL, &sh_log[0]); - LOG_ERROR("shader [" << shader_name << "] compilation failed:" << std::endl << String(&sh_log[0])); + LOG_WARNING("shader [" << shader_name << "] compilation failed:" << std::endl << String(&sh_log[0])); return false; } return true; @@ -105,14 +105,14 @@ void Shader::Link(const std::string& pr_name, const std::string& vs_code, const GLuint shader_id; if(Compile(pr_name+" vs",vs_code,GL_VERTEX_SHADER,shader_id)) { - LOG_VERBOSE("attaching compiled vertex shader id " << shader_id << " to " << shader_pr); + LOG_DEBUG("attaching compiled vertex shader id " << shader_id << " to " << shader_pr); glAttachShader(shader_pr,shader_id); } else { LOG_WARNING("skipping [" << pr_name << "] due to error in vertex shader code"); return; } if(Compile(pr_name+" fs",fs_code,GL_FRAGMENT_SHADER,shader_id)) { - LOG_VERBOSE("attaching compiled fragment shader id " << shader_id << " to " << shader_pr); + LOG_DEBUG("attaching compiled fragment shader id " << shader_id << " to " << shader_pr); glAttachShader(shader_pr,shader_id); } else { LOG_WARNING("skipping [" << pr_name << "] due to error in fragment shader code"); @@ -129,7 +129,7 @@ void Shader::Link(const std::string& pr_name, const std::string& vs_code, const glGetProgramiv(shader_pr, GL_INFO_LOG_LENGTH, &pr_log_length); std::vector<GLchar> pr_log(pr_log_length+1); glGetProgramInfoLog(shader_pr, pr_log_length, NULL, &pr_log[0]); - LOG_ERROR("shader [" << pr_name << "] linking failed:" << std::endl << String(&pr_log[0])); + LOG_WARNING("shader [" << pr_name << "] linking failed:" << std::endl << String(&pr_log[0])); return; } shader_program_map_[pr_name]=shader_pr; @@ -186,7 +186,7 @@ void Shader::Setup() bf::path shader_file(shader_dir / shader_name); if(!bf::exists(shader_file)){ - LOG_ERROR("shader file not found: [" << shader_file.string() << "]"); + LOG_WARNING("shader file not found: [" << shader_file.string() << "]"); shader_code_map[shader_name]=std::string(); continue; } @@ -297,7 +297,7 @@ void Shader::Activate(const String& name) if(!name.empty()) { std::map<String, GLuint>::iterator it = shader_program_map_.find(name); if(it!=shader_program_map_.end()) { - LOG_VERBOSE("switching to shader [" << name << "]"); + LOG_TRACE("switching to shader [" << name << "]"); glUseProgram(it->second); current_program_=it->second; current_name_=name; @@ -306,11 +306,11 @@ void Shader::Activate(const String& name) return; } else { - LOG_WARNING("shader program [" << name << "] not present"); + LOG_TRACE("shader program [" << name << "] not present"); return; } } - LOG_VERBOSE("switching to fixed pipeline"); + LOG_TRACE("switching to fixed pipeline"); glUseProgram(0); current_program_=0; current_name_=""; diff --git a/modules/gui/pymod/init_spacenav.py b/modules/gui/pymod/init_spacenav.py index d7006e9061be2626162ab9a3dd192e7e3a8f52c7..847ec5d4b983057a715c85882924daabb87cc6cb 100644 --- a/modules/gui/pymod/init_spacenav.py +++ b/modules/gui/pymod/init_spacenav.py @@ -1,4 +1,4 @@ -import traceback +import math,traceback from PyQt4 import QtCore @@ -16,19 +16,30 @@ class SpacenavControl(QtCore.QObject): self.rot = True self.speed = 480.0 - def Changed(self, tx,ty,tz,rx,ry,rz): - transf = gfx.Scene().GetTransform() + def Changed(self, tx,ty,tz,rx,ry,rz): + scene=gfx.Scene() + tf = scene.transform + def d(r): + if r==0.0: + return 0.0 + rr=r/abs(r)*max(0.0,abs(r)-0.9) + return rr/abs(rr)*(math.pow(1.01,abs(rr))-1.0)*40.0/self.speed if abs(rr)>0.0 else 0.0 if(self.trans): - transf.ApplyXAxisTranslation(tx/self.speed) - transf.ApplyYAxisTranslation(ty/self.speed) + tf.ApplyXAxisTranslation(d(tx)) + tf.ApplyYAxisTranslation(d(ty)) + # adjust translation speed to distance from viewpoint + currz=tf.trans[2]; + delta=currz*math.pow(1.01,d(tz))-currz; + tf.ApplyZAxisTranslation(delta); + # adjust near and far clipping planes together with z trans + scene.SetNearFar(scene.near-delta,scene.far-delta); if(self.rot): - transf.ApplyXAxisRotation(rx/self.speed) - transf.ApplyYAxisRotation(ry/self.speed) - transf.ApplyZAxisRotation(rz/self.speed) - if(self.trans or self.rot): - transf.ApplyZAxisTranslation(-tz/self.speed) - gfx.Scene().SetTransform(transf) - gfx.Scene().RequestRedraw() + tf.ApplyXAxisRotation(d(rx)) + tf.ApplyYAxisRotation(d(ry)) + tf.ApplyZAxisRotation(d(rz)) + + scene.transform=tf + scene.RequestRedraw() def Toggle(self, button): if button == 0: @@ -45,7 +56,7 @@ class SpacenavControl(QtCore.QObject): self.speed /= 0.8 ost.LogVerbose("SpaceNav: speed reduced to "+str(self.speed)) else: - ost.LogDebug("SpaceNav: unmapped button press ["+str(button)+"]") + ost.LogVerbose("SpaceNav: unmapped button press ["+str(button)+"]") def _InitSpaceNav(app):