/////////////////////////////////////////////////////////////////////////////// // 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++; } }