Esempio n. 1
0
///////////////////////////////////////////////////////////////////////////////
// Berechnen dieser Objekteigenschaft
STDMETHODIMP CSimpleAreaRadius::Eval (LONG lONr, LPSTR pBuffer, ULONG ulLen, ULONG *pulWritten)
{
//	AFX_MANAGE_STATE(AfxGetAppModuleState())

	if (NULL == pBuffer) 
		return E_POINTER;
	_ASSERTE(0 != ulLen);

CGObject Obj (lONr);

	if (Obj.FInit() && OGFlaeche == Obj.iObjTyp() && ulLen > 32) {		// 32 Zeichen werden zumindest gebraucht
	// nur für FlächenObjekte
	double dObjArea = 0.0;
	os_string strUnit;

		RETURN_FAILED_HRESULT(Obj.AreaOfPolygon(&dObjArea, strUnit, true));

	// muß als Längenmaßeinheit ausgewertet werden
	si::Length dRadius (sqrt(dObjArea/si::pi)/2);
	double dResult = dRadius.measuredIn(((CStatist *)g_pTE) -> GetUoL (dRadius, strUnit));

		sprintf (pBuffer, "%f%s", dResult, strUnit.c_str());
		if (pulWritten) 
			*pulWritten = strlen(pBuffer);

	// Infos für Kumulation sammeln
		RETURN_FAILED_HRESULT(m_CumPts -> AddValue (dResult, vtMissing));
		IncrementCount();			// Zähler der erfolgreichen Aufrufe
		return S_OK;
	}
	return E_FAIL;		// ObjProperty existiert nicht
}
/**
 * Generates n trees in a circle. The generated trees have a randomized scale
 * and rotation.
 */
void Forest::generateTrees(unsigned int nTrees) {
    std::uniform_real_distribution<float> dScale(1.0f, 1.5f);
    std::uniform_real_distribution<float> dRadius(0.0f, this->radius);
    std::uniform_real_distribution<float> dAngle(0, glm::two_pi<float>());
    
    trees.reserve(nTrees);
    
    Tree tree(
        glm::vec3(0.0f, 0.0f, 0.0f), // position
        glm::vec3(10.0f),            // scaling vector
        dAngle(randomGen)            // phase shift
    );
    
    unsigned int generatedTrees = 0;
    while (generatedTrees != nTrees) {
        float radius = dRadius(randomGen);
        float angle = dAngle(randomGen);
        glm::vec3 position(
            radius * cos(angle),
            0.0f,
            radius * sin(angle)
        );
        
        // discard trees generated in the river's path
        if (position.x >= -50.0f && position.x <= 35.0f) {
            continue;
        }
        
        trees.push_back(
            Tree(tree, dAngle(randomGen))
        );
        trees.back().getModel()
            .setPosition(position)
            .scale(glm::vec3(1.0f, dScale(randomGen), 1.0f))
            .rotate(dAngle(randomGen));
        
        generatedTrees++;
    }
}