Exemplo n.º 1
0
	void controlPointsChanged()
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return;

		patchNode->getPatch().controlPointsChanged();
	}
Exemplo n.º 2
0
	// Shader handling
	const std::string& getShader() const
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return _emptyShader;

		return patchNode->getPatch().getShader();
	}
Exemplo n.º 3
0
	// Check whether all control vertices are in the same 3D spot (with minimal tolerance)
	bool isDegenerate() const
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return true;

		return patchNode->getPatch().isDegenerate();
	}
Exemplo n.º 4
0
 	void appendPoints(bool columns, bool beginning)
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return;

		return patchNode->getPatch().appendPoints(columns, beginning);
	}
Exemplo n.º 5
0
 	void removePoints(bool columns, std::size_t index)
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return;

		return patchNode->getPatch().removePoints(columns, index);
	}
Exemplo n.º 6
0
	void setShader(const std::string& name)
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return;

		patchNode->getPatch().setShader(name);
	}
Exemplo n.º 7
0
	bool hasVisibleMaterial()
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return false;

		return patchNode->getPatch().hasVisibleMaterial();
	}
Exemplo n.º 8
0
 	void insertRows(std::size_t rowIndex)
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return;

		return patchNode->getPatch().insertRows(rowIndex);
	}
Exemplo n.º 9
0
	std::size_t getHeight() const
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return 0;

		return patchNode->getPatch().getHeight();
	}
Exemplo n.º 10
0
	PatchMesh getTesselatedPatchMesh() const
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return PatchMesh();

		return patchNode->getPatch().getTesselatedPatchMesh();
	}
Exemplo n.º 11
0
	// Resizes the patch to the given dimensions
	void setDims(std::size_t width, std::size_t height)
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return;

		patchNode->getPatch().setDims(width, height);
	}
Exemplo n.º 12
0
	void setFixedSubdivisions(bool isFixed, const Subdivisions& divisions)
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return;

		patchNode->getPatch().setFixedSubdivisions(isFixed, divisions);
	}
Exemplo n.º 13
0
	Subdivisions getSubdivisions() const
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return Subdivisions();

		return patchNode->getPatch().getSubdivisions();
	}
Exemplo n.º 14
0
	bool subdivionsFixed() const
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return false;

		return patchNode->getPatch().subdivionsFixed();
	}
Exemplo n.º 15
0
	// Return a defined patch control vertex at <row>,<col>
	PatchControl& ctrlAt(std::size_t row, std::size_t col)
	{
		IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(_node.lock());
		if (patchNode == NULL) return _emptyPatchControl;

		IPatch& patch = patchNode->getPatch();

		if (row > patch.getHeight() || col > patch.getWidth())
		{
			rError() << "One or more patch control indices out of bounds: " << row << "," << col << std::endl;
			return _emptyPatchControl;
		}

		return patchNode->getPatch().ctrlAt(row, col);
	}
Exemplo n.º 16
0
void WaveFrontExporter::visit(const scene::INodePtr& node) const
{
	IBrushNodePtr brushNode = boost::dynamic_pointer_cast<IBrushNode>(node);

	if (brushNode != NULL)
	{
		// SelectionSystem Visitor is const, what a pain
		const_cast<WaveFrontExporter&>(*this).exportBrush(brushNode->getIBrush());
		return;
	}

	IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(node);

	if (patchNode != NULL)
	{
		const_cast<WaveFrontExporter&>(*this).exportPatch(patchNode->getPatch());
		return;
	}
}
Exemplo n.º 17
0
/*
// Example Primitive
{
patchDef2
{
"textures/darkmod/stone/brick/rough_big_blocks03"
( 5 3 0 0 0 )
(
( ( 64 -88 108 0 0 ) ( 64 -88 184 0 -1.484375 ) ( 64 -88 184 0 -1.484375 ) )
( ( 64 -88 184 1.484375 0 ) ( 64 -88 184 1.484375 -1.484375 ) ( 64 -88 184 1.484375 -1.484375 ) )
( ( 112 -88 184 2.421875 0 ) ( 112 -88 184 2.421875 -1.484375 ) ( 112 -88 184 2.421875 -1.484375 ) )
( ( 160 -88 184 3.359375 0 ) ( 160 -88 184 3.359375 -1.484375 ) ( 160 -88 184 3.359375 -1.484375 ) )
( ( 160 -88 108 4.84375 0 ) ( 160 -88 184 4.84375 -1.484375 ) ( 160 -88 184 4.84375 -1.484375 ) )
)
}
}
*/
scene::INodePtr PatchDef2Parser::parse(parser::DefTokeniser& tok) const
{
	scene::INodePtr node = GlobalPatchCreator(DEF2).createPatch();

	IPatchNodePtr patchNode = boost::dynamic_pointer_cast<IPatchNode>(node);
	assert(patchNode != NULL);

	IPatch& patch = patchNode->getPatch();

	tok.assertNextToken("{");

	// Parse shader
	patch.setShader(tok.nextToken());

	// Parse parameters
	tok.assertNextToken("(");

	// parse matrix dimensions
	std::size_t cols = string::convert<std::size_t>(tok.nextToken());
	std::size_t rows = string::convert<std::size_t>(tok.nextToken());

	patch.setDims(cols, rows);

	// ignore contents/flags values
	tok.skipTokens(3);

	tok.assertNextToken(")");

	// Parse Patch Matrix
	parseMatrix(tok, patch);

	// Parse Footer
	tok.assertNextToken("}");
	tok.assertNextToken("}");

	patch.controlPointsChanged();

	return node;
}