NXCommandResult const *const
	NXRenderingEngine::addFrame(NXMoleculeSet *const molSetPtr)
{
	ClearResult(commandResult);
	NXSGNode *newFrame = createSceneGraph(molSetPtr);
	if(newFrame != (NXSGNode*) NULL) {
		moleculeSets.push_back(molSetPtr);
		frames.push_back(newFrame);
	}
	return &commandResult;
}
void Exporter::createSceneGraph(MFnDagNode& path, int parentIndex)
{
	Node output;
	std::vector<std::string> pathparts;
	output.name = path.fullPathName().asChar();
	splitStringToVector(output.name, pathparts, "|");
	output.name = pathparts[pathparts.size() - 1];
	if (!strcmp(output.name.c_str(), "persp"))
		return;
	else if (!strcmp(output.name.c_str(), "top"))
		return;
	else if (!strcmp(output.name.c_str(), "side"))
		return;
	else if (!strcmp(output.name.c_str(), "front"))
		return;
	output.parent = parentIndex;
	output.transform = path.transformationMatrix().matrix;



	scene_.sceneGraph.push_back(output);
	int children = path.childCount();
	int parent = scene_.sceneGraph.size() - 1;
	for (int i = 0; i < children; i++)
	{
		cout << path.child(i).apiTypeStr() << endl;
		if (!strcmp(path.child(i).apiTypeStr(), "kMesh")){
			scene_.sceneGraph[parent].type = 1;
			MFnMesh mesh(path.child(i));
			MDagPath dag_path;
			MItDag dag_iter(MItDag::kBreadthFirst, MFn::kMesh);
			int y = 0;
			while (!dag_iter.isDone())
			{
				if (dag_iter.getPath(dag_path))
				{
					MFnDagNode dag_node = dag_path.node();
					if (!dag_node.isIntermediateObject())
					{
						if (!strcmp(mesh.partialPathName().asChar(), dag_node.partialPathName().asChar()))
							scene_.sceneGraph[parent].mesh = y;
						y++;
					}
				}
				dag_iter.next();
			}
		}
//		else if (!strcmp(path.child(i).apiTypeStr(), "kCamera")); kan l�gga till fler typer h�r
		else
		createSceneGraph(MFnDagNode(path.child(i)), parent);
	}


}
Example #3
0
int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
    glutInitWindowSize(width, height);
    glutCreateWindow("tests/graphics");

    glutReshapeFunc(reshape);
    glutDisplayFunc(display);
    glutKeyboardFunc(processNormalKeys);
    glutMotionFunc(mouseFunc);

    createSceneGraph();

    glutMainLoop();
    return 0;
}
// identifierar alla mesharna i scenen och extraherar data fr�n dem
bool Exporter::IdentifyAndExtractMeshes()
{
	UINT index = 0;
	scene_.meshes.clear();

	//itererar �ver DG:n och lagrar rgba-v�rden och texturnamn i ett tempor�rt material
	material tempmaterial;
	MItDependencyNodes matIt(MFn::kLambert);
	MString aC("ambientColor"), dC("color"), sC("specularColor"), gC("incandescence"), tC("transparency");
	while (!matIt.isDone()){
		if (matIt.item().hasFn(MFn::kPhong))
		{
			MFnPhongShader tempphong(matIt.item());
			tempmaterial.type = PHONG;
			extractColor(tempmaterial.ambient, tempphong, aC);
			extractColor(tempmaterial.diffuse, tempphong, dC);
			extractColor(tempmaterial.specular, tempphong, sC);
			extractColor(tempmaterial.glow, tempphong, gC);
			extractColor(tempmaterial.transparency, tempphong, tC);
		}
		else if (matIt.thisNode().hasFn(MFn::kBlinn))
		{
			MFnBlinnShader tempblinn(matIt.item());
			tempmaterial.type = BLINN;
			extractColor(tempmaterial.ambient, tempblinn, aC);
			extractColor(tempmaterial.diffuse, tempblinn, dC);
			extractColor(tempmaterial.specular, tempblinn, sC);
			extractColor(tempmaterial.glow, tempblinn, gC);
			extractColor(tempmaterial.transparency, tempblinn, tC);
		}
		else if (matIt.item().hasFn(MFn::kLambert))
		{
			MFnLambertShader templamb(matIt.item());
			tempmaterial.type = LAMBERT;
			extractColor(tempmaterial.ambient, templamb, aC);
			extractColor(tempmaterial.diffuse, templamb, dC);
			extractColor(tempmaterial.specular, templamb, sC);
			extractColor(tempmaterial.glow, templamb, gC);
			extractColor(tempmaterial.transparency, templamb, tC);
		}
		else
			printf("No material found\n");
		scene_.materials.push_back(tempmaterial);
		matIt.next();
	}

	//Turn off or on Blendshapes
	matIt.reset(MFn::kBlendShape);
	while (!matIt.isDone())
	{
		MFnBlendShapeDeformer bs(matIt.item());

		//Get the envelope attribute plug
		MPlug pl = bs.findPlug("en");

		//Set the 0 to disable FFD effect, enable by setting it to 1:
		pl.setValue(1.0f);

		matIt.next();
	}

	//Get Actual Blendshapes
	matIt.reset(MFn::kBlendShape);
	while (!matIt.isDone())
	{
		MFnBlendShapeDeformer bs(matIt.item());

		MObjectArray base_objects;

		//print blend shape name
		cout << "Blendshape " << bs.name().asChar() << endl;

		//Get a list of objects that this blend shape deforms
		bs.getBaseObjects(base_objects);

		cout << "NumBaseOBjects " << base_objects.length() << endl;

		//loop through each blendshaped object
		for (int i = 0; i < base_objects.length(); ++i)
		{
			//Get the base shape
			MObject Base = base_objects[i];

			//Output all of the target shapes and weights
			OutputBlendShapes(bs, Base);
		}
		//Get next blend shapes
		matIt.next();
	}

	MDagPath dag_path;
	MItDag dag_iter(MItDag::kBreadthFirst, MFn::kMesh);

	while (!dag_iter.isDone())
	{
		if (dag_iter.getPath(dag_path))
		{
			MFnDagNode dag_node = dag_path.node();

			// vill endast ha "icke-history"-f�rem�l
			if (!dag_node.isIntermediateObject())
			{
				// triangulera meshen innan man h�mtar punkterna
				MFnMesh mesh(dag_path);
				ExtractMeshData(mesh, index);
				index++;
			}
		}

		dag_iter.next();
	}

	MItDependencyNodes it(MFn::kSkinClusterFilter);
	for (; !it.isDone(); it.next()) {


		MObject object = it.item();


		OutputSkinCluster(object);

	}

	//Hitta kamera data
	dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kCamera);
	while (!dag_iter.isDone())
	{

		extractCamera(dag_iter.item());
		dag_iter.next();
	}

	//itererar dag och s�ker data f�r tillg�ngliga ljus
	//om ej ljus finns i scenen ignoreras denna iteration f�r sagda scen.
	dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kLight);
	while (!dag_iter.isDone())
	{
		//funktion till v�r iterator
		MFnLight func(dag_iter.item());

		//namn:
		export_stream_ << "Light: " << func.name().asChar() << std::endl;

		//kalla p�EextractLight function
		extractLight(dag_iter.item());

		//vidare till n�sta ljus i dag'en
		dag_iter.next();


		/*
		if (dag_iter.getPath(dag_path))
		{
		auto test = dag_path.fullPathName();
		export_stream_ << "light: " << test << std::endl;
		}
		dag_iter.next();
		*/
	}

	dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kJoint);
	while (!dag_iter.isDone())
	{
		if (dag_iter.getPath(dag_path))
		{
			MFnDagNode dag_node = dag_path.node();

			if (!dag_node.isIntermediateObject())
			{
				extractJointData(dag_path);
			}
		}
		dag_iter.next();
	}
	int breadth=0;
	dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kTransform);
	while (!dag_iter.isDone())
	{
		int depth = dag_iter.depth();
		if (depth > 1)
			break;
		if (dag_iter.getPath(dag_path))
		{
			createSceneGraph(MFnDagNode(dag_path),-1);
		}
		breadth++;
		dag_iter.next();
	}
	/*
	//general purpose iterator, sista argument �r filtret
		dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kLight);
		while (!dag_iter.isDone())
		{
		if (dag_iter.getPath(dag_path))
		{

		}
		dag_iter.next();
		}
		*/


	return true;
}