示例#1
0
int Image::getMax()
{
	// Alternatively create max from histogram
	//IntIntMap::iterator iter = this->getHistogram()->end();
	//iter--;
	//return (*iter).first;
	if (mBaseImageData->GetNumberOfScalarComponents() == 3)
	{
		if (mMaxRGBIntensity != -1)
		{
			return mMaxRGBIntensity;
		}
		QDateTime before = QDateTime::currentDateTime();
		double max = 0.0;
		switch (mBaseImageData->GetScalarType())
		{
		case VTK_UNSIGNED_CHAR:
			max = getRGBMax<unsigned char>(mBaseImageData);
			break;
		case VTK_UNSIGNED_SHORT:
			max = getRGBMax<unsigned short>(mBaseImageData);
			break;
		default:
			CX_LOG_ERROR() << "Unhandled RGB data type in image " << this->getUid();
			break;
		}
		mMaxRGBIntensity = max;
		return (int)mMaxRGBIntensity;
	}
	else
	{
//		return (int) this->getTransferFunctions3D()->getScalarMax();
		return mBaseImageData->GetScalarRange()[1];
	}
}
示例#2
0
void ShaderCallback::addUniformfArray(vtkShaderProgram *program, std::string name, float value)
{
	//Note: Set uniform will fail if the uniform is not present OR active (used inside the program).
	report_gl_error();

	//CX_LOG_DEBUG() << "Adding uniform called: " << name << " with value " << value;
	if(!program->SetUniform1fv(name.c_str(), 1, &value))
	{
		CX_LOG_ERROR() << "Could not set uniform named " << name;
	}

	report_gl_error();
}
QPoint LayoutWidgetUsingViewWidgets::getPosition(ViewPtr view)
{
    ViewWidget* widget = this->WidgetFromView(view);
    if (!widget)
    {
        CX_LOG_ERROR() << "Did not find view in layout " << view->getUid();
        return QPoint(0,0);
    }

    QPoint p = widget->mapToGlobal(QPoint(0,0));
    p = this->mapFromGlobal(p);
    return p;
}
示例#4
0
void ShaderCallback::bindFSOutputVariable(vtkShaderProgram *program)
{
	GLint color_frag_out_index = glGetFragDataLocation(program->GetHandle(), FS_Out_Vec4_Color.c_str());

	if(color_frag_out_index != -1)
	{
		glBindFragDataLocation(program->GetHandle(), color_frag_out_index, FS_Out_Vec4_Color.c_str()); //setting output of fragment shader
		//CX_LOG_DEBUG() << "Binding fragmentshader output to " << FS_Out_Vec4_Color << " at index "<< color_frag_out_index;
	}
	else
	{
		CX_LOG_ERROR() << "Could not find glGetFragDataLocation for " << FS_Out_Vec4_Color;
	}
}
示例#5
0
QString DataLocations::getDocPath()
{
	if(!isRunFromBuildFolder())
	{
        QString path = QString("%1/%2").arg(qApp->applicationDirPath()).arg(CX_DOC_ROOT_RELATIVE_INSTALLED);
//		QString path = getBundlePath() + "/" + CX_DOC_ROOT_RELATIVE_INSTALLED; // look for installed location
		if (QDir(path).exists())
			return QDir(path).canonicalPath();
		else
		{
			CX_LOG_ERROR() << QString("Cannot find doc path: ") << path;
			return "";
		}
	}

	if (QDir(CX_DOC_ROOT).exists()) // look for folder in source code
		return QDir(CX_DOC_ROOT).canonicalPath();
	else
	{
		CX_LOG_ERROR() << QString("Cannot find doc path: ") << CX_DOC_ROOT;
		return "";
	}
}
示例#6
0
ShaderCallback::ShaderItemPtr ShaderCallback::getShaderItem(QString image_uid) const
{
	ShaderItemPtr item;

	for(int i=0; i<mShaderItems.size(); ++i)
	{
		item = mShaderItems.at(i);

		if(item->mTextureUid == image_uid)
		{
			return item;
		}
	}

	CX_LOG_ERROR() << "COULD NOT FIND THE SHADERITEM";
	return item;
}
示例#7
0
/**
 * @brief ShaderCallback::addArrayToAttributeArray
 * In the vertex shader there is an in array of vec3 which will contain texture coordinates per uploaded texture. This function populates this array.
 * @param program The shader program to work with.
 * @param buffer The buffer containing the texture coordinates.
 * @param name The name of the array variable in the vertex shader which will point to the texture coordinates.
 * @param vector_index The place in the
 */
void ShaderCallback::addArrayToAttributeArray(vtkShaderProgram *program, vtkOpenGLBufferObjectPtr buffer, std::string name, int vector_index)
{
	//--------
	//This is information about how the texture coordinates are uploaded.
	int offset = 0;
	int vec_size = 3;
	size_t stride = sizeof(float)*vec_size; //is this correct? was *3;
	int elementType = GL_FLOAT; //VTK_FLOAT
	bool normalize = false;

	//CX_LOG_DEBUG() << "Adding attribute called: " << name << " to vector_index: " << vector_index;
	//--------

	const GLchar *namePtr = static_cast<const GLchar *>(name.c_str());
	GLint start_of_vector_index = glGetAttribLocation(program->GetHandle(), namePtr);
	report_gl_error();


	if(start_of_vector_index != -1)
	{
		GLint position_in_vector_index = start_of_vector_index + vector_index;
		buffer->Bind();

		glEnableVertexAttribArray(position_in_vector_index);

		glVertexAttribPointer(position_in_vector_index,
				      vec_size,
				      elementType,
				      normalize,
				      static_cast<GLsizei>(stride),
				      ((char *)NULL + (offset))
				     );
		report_gl_error();
	}
	else
	{
		CX_LOG_ERROR() << "Error setting attribute " << name << " with vector_index " << vector_index;
	}

}
示例#8
0
	virtual void updateTexture()
	{
		if (mMTime == mTexture->GetMTime())
		{
			return;
		}
		mMTime = mTexture->GetMTime();
		//vtkgl::ActiveTexture(getGLTextureForVolume(textureUnitIndex)); //TODO is this OK?
		GLenum size,internalType;
		boost::uint32_t dimx = mTexture ->GetDimensions( )[0];
		boost::uint32_t dimy = mTexture ->GetDimensions( )[1];
		boost::uint32_t dimz = mTexture ->GetDimensions( )[2];
		mMemorySize = dimx * dimy * dimz;

		glEnable( GL_TEXTURE_3D );
		glBindTexture(GL_TEXTURE_3D, textureId);
		report_gl_error();
		glTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP );
		glTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP );
		glTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP );
		glTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
		glTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
		switch (mTexture->GetScalarType())
		{
		case VTK_UNSIGNED_CHAR:
		{
			size = GL_UNSIGNED_BYTE;
			internalType = GL_LUMINANCE;
		}
			break; //8UI_EXT; break;
		case VTK_UNSIGNED_SHORT:
		{
			size = GL_UNSIGNED_SHORT;
			internalType = GL_LUMINANCE16;
			mMemorySize *= 2;
		}
			break; //16UI_EXT; break;
		default:
			size = 0;
			internalType = 0;
			std::cout << "Bit size not supported!" << std::endl;
			QString dataType(mTexture->GetScalarTypeAsString());
			CX_LOG_ERROR() << QString("Attempt to update 3D GL texture from type %1 failed. Only unsigned types supported").arg(dataType);
			break;
		}

		if (mTexture->GetNumberOfScalarComponents()==1)
		{
			void* data = mTexture->GetPointData()->GetScalars()->GetVoidPointer(0);
			glTexImage3D(GL_TEXTURE_3D, 0, internalType, dimx, dimy, dimz, 0, GL_LUMINANCE, size, data);
		}
		else if (mTexture->GetNumberOfScalarComponents()==3)
		{
			internalType = GL_RGB;
			void* data = mTexture->GetPointData()->GetScalars()->GetVoidPointer(0);
			glTexImage3D(GL_TEXTURE_3D, 0, internalType, dimx, dimy, dimz, 0, GL_RGB, size, data);
			mMemorySize *= 3;
		}
		else
		{
			std::cout << "unsupported number of image components" << std::endl;
		}

		glDisable(GL_TEXTURE_3D);

		report_gl_error();
	}
示例#9
0
QAction* MainWindowActions::getAction(QString uid)
{
	if (!mActions.count(uid))
		CX_LOG_ERROR() << QString("Could not find action %1 in MainWindowActions object").arg(uid);
	return mActions[uid];
}