ScaleDependentRenderer.cpp 4.8 KB

#include "ScaleDependentRenderer.h"
#include"clsXML.h"
#include"DataCollection.h"
#include"SimpleMarkerSymbol.h"
#include"SimpleLabelRenderer.h"
#include"SimpleLineSymbol.h"
#include"SimplePolygonSymbol.h"
#include"ValueMapRenderer.h"
#include"RangeMapRenderer.h"
#include"GroupRenderer.h"
namespace DmapCore_30
{
	ScaleDependentRenderer::ScaleDependentRenderer()
	{
		m_dLower = 0.0;
		m_dUpper = 1e308;
		m_pRenderer = NULL;
		m_simpleRenderer = false;
	}


	ScaleDependentRenderer::~ScaleDependentRenderer()
	{
		if (m_pRenderer)
		{
			m_pRenderer->Release();
			m_pRenderer = NULL; //注意手工重置为 NULL
		}
	}
	BOOL ScaleDependentRenderer::Parse(rapidxml::xml_node<char>* node, AppendBuffer *f)
	{
		if (!node&& !f)return false;
		clsXML clsX(f, "SCALEDEPENDENTRENDERER");
		clsXML::XMLAttrParse(node, f, &m_dLower, "lower");
		clsXML::XMLAttrParse(node, f, &m_dUpper, "upper");
		clsX.closeProperties();
		if (node)
		{
			clsXML::XMLParse(node->first_node(), NULL, &m_pRenderer);
		}
		else
		{
			clsXML::XMLParse(NULL, f, &m_pRenderer);
		}
		return true;
	}

	bool ScaleDependentRenderer::ParsePtree( boost::property_tree::ptree &pt)
	{
		return true;
	}

    void  ScaleDependentRenderer::ToJson(AppendBuffer *ab)
	{

	}

	//BOOL ScaleDependentRenderer::RendererString(Renderer** ppRen, const char** psXML)
	//{
	//	return true;
	//}

	int ScaleDependentRenderer::RendererType()
	{
		return dmapScaleDependentRenderer;
	}
	ScaleDependentRenderer* ScaleDependentRenderer::CreateNew()
	{
		ScaleDependentRenderer* sdr = new ScaleDependentRenderer();
		return sdr;
	}

	double ScaleDependentRenderer::GetLower()
	{
		return m_dLower;
	}
	BOOL ScaleDependentRenderer::SetLower(double lower)
	{
		if (lower < 0)
			return false;
		m_dLower = lower;
		return true;
	}
	double ScaleDependentRenderer::GetUpper()
	{
		return m_dUpper;
	}
	BOOL ScaleDependentRenderer::SetUpper(double upper)
	{
		if (upper < 0)
			return false;
		m_dUpper = upper;
		return true;
	}

	Renderer* ScaleDependentRenderer::GetRenderer()
	{
		if (m_pRenderer)
			m_pRenderer->AddRef();
		return m_pRenderer;
	}
	BOOL ScaleDependentRenderer::SetRenderer(Renderer* renderer)
	{
		if (!renderer)
			return false;
		renderer->AddRef();
		if (m_pRenderer)
			m_pRenderer->Release();
		m_pRenderer = renderer;
		return true;
	}

	BOOL ScaleDependentRenderer::DrawData(clsCrSurf* pClsCS, DataCollection* data, 
	bool drawSimpleData, char* pFlag)
	{
		//DrawData是否要使用重载??现在弄进去有麻烦啊
		double r__ = data->m_dR;
		double r = r__ / (96/0.0254);
		if (r <m_dLower || r > m_dUpper)
			return false;
		int renType = m_pRenderer->RendererType();
		m_pRenderer->DrawData(pClsCS, data, pFlag);
		/*switch (renType)
		{
		case dmapSimpleMarkerSymbol:((SimpleMarkerSymbol*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapSimpleLineSymbol:((SimpleLineSymbol*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapSimplePolygonSymbol:((SimplePolygonSymbol*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapValueMapRenderer:((ValueMapRenderer*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapRangeMapRenderer:((RangeMapRenderer*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapGroupRenderer:((GroupRenderer*)m_pRenderer)->DrawData(pClsCS, data, pFlag); break;
		case dmapSimpleLabelRenderer:((SimpleLabelRenderer*)m_pRenderer)->DrawData(pClsCS, data, pFlag); break;
		default:
		break;
		}*/
		return true;
	}

	BOOL  ScaleDependentRenderer::DrawData(clsCrSurf* pClsCS, 
	DataCollection* data, int dataIndex, char* pFlag)
	{
		//DrawData是否要使用重载??现在弄进去有麻烦啊
		double r__ = data->m_dR;
		double r = r__ / (96/0.0254);
		if (r <m_dLower || r > m_dUpper)
			return false;
		int renType = m_pRenderer->RendererType();
	//	data->m_pData
		m_pRenderer->DrawData(pClsCS, data, dataIndex, pFlag);
		/*switch (renType)
		{
		case dmapSimpleMarkerSymbol:((SimpleMarkerSymbol*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapSimpleLineSymbol:((SimpleLineSymbol*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapSimplePolygonSymbol:((SimplePolygonSymbol*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapValueMapRenderer:((ValueMapRenderer*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapRangeMapRenderer:((RangeMapRenderer*)m_pRenderer)->DrawData(pClsCS, data); break;
		case dmapGroupRenderer:((GroupRenderer*)m_pRenderer)->DrawData(pClsCS, data, pFlag); break;
		case dmapSimpleLabelRenderer:((SimpleLabelRenderer*)m_pRenderer)->DrawData(pClsCS, data, pFlag); break;
		default:
		break;
		}*/
		return true;
	}

	BOOL ScaleDependentRenderer::DrawLegend(clsCrSurf* pClsCS, shared_ptr<legendParamater> pLegendParamater,int layerType, char* pFlag)
	{
	
		return true;
	}
	

	void ScaleDependentRenderer::TryAddField(vector<string>&pvField)
	{
		if (m_pRenderer)m_pRenderer->TryAddField(pvField);
	}
}