コード例 #1
0
ファイル: Module.cpp プロジェクト: GitBruno/RaspiDrums
	void Module::GetDrumCurve(std::string curveName, std::vector<float>& curve)
	{

		DrumCurve drumCurve = GetCurveType(curveName);

		switch(drumCurve)
		{

		case DrumCurve::exponential:
				Curves::Exponential(curve);
			break;

		default:
				Curves::Linear(curve);
			break;
		}

		return;
	}
コード例 #2
0
size_t
HdBasisCurvesTopology::CalculateNeededNumberOfVaryingControlPoints() const
{
    if (GetCurveType() == HdTokens->linear){
        // For linear curves, varying and vertex interpolation is identical.
        return CalculateNeededNumberOfControlPoints();
    }
    size_t numVerts= 0;
    int numSegs = 0, vStep = 0;
    bool wrap = GetCurveWrap() == HdTokens->periodic;
    
    if(GetCurveBasis() == HdTokens->bezier) {
        vStep = 3;
    }
    else {
        vStep = 1;
    }

    // Make absolutely sure the iterator is constant 
    // (so we don't detach the array while multi-threaded)
    for (VtIntArray::const_iterator itCounts = _curveVertexCounts.cbegin();
            itCounts != _curveVertexCounts.cend(); ++itCounts) {
        
        // Handling for the case of potentially incorrect vertex counts 
        if (*itCounts < 1) {
            continue;
        }

        // The number of verts is different if we have periodic vs non-periodic
        // curves, check basisCurvesComputations.cpp line 207 for a diagram.
        if (wrap) {
            numSegs = *itCounts / vStep;
        } else {
            numSegs = ((*itCounts - 4) / vStep) + 1;
        }
        numVerts += numSegs + 1;
    }

    return numVerts;
}
コード例 #3
0
// 传入的DOM模型为
// <Curve>
// 	    <CurveType>CIRCLE</CurveType>
// 		<Params>
// 			<double>-0.05</double>
// 			<double>-0.050000000000000017</double>
// 			<double>0</double>
// 			<double>0</double>
// 			<double>-0</double>
// 			<double>-1</double>
// 			<double>0.01</double>
// 			<double>0</double>
// 			<double>0</double>
// 			<double>0</double>
// 			<double>0</double>
// 		</Params>
// </Curve>
void CurveInputDecorator::Parse(const char *id, xercesc::DOMElement* element) {
    if (NULL == element)
        return;

    vaar_data::CurveType type = vaar_data::CurveType::LINE_CURVE;
    double params[CURVE_PARAMS_LENGTH];
    xercesc::DOMElement* current_element = NULL;
    int i = 0;

    // 解析类型
    element = element->getFirstElementChild();
    if (NULL != element &&
            0 == strcmp("CurveType", xercesc::XMLString::transcode(element->getTagName()))) {
        type = GetCurveType(xercesc::XMLString::transcode(element->getTextContent()));
    }

    // 解析参数
    element = element->getNextElementSibling();
    if (NULL != element &&
            0 == strcmp("Params", xercesc::XMLString::transcode(element->getTagName()))) {

        current_element = element->getFirstElementChild();
        do {
            sscanf_s(
                xercesc::XMLString::transcode(current_element->getTextContent()),
                "%lf",
                &params[i++]
            );
        } while (
            current_element != element->getLastElementChild(),
            current_element = current_element->getNextElementSibling()
        );
    }

    // 填充对象
    curve_ = std::tr1::shared_ptr<vaar_data::Curve>(new vaar_data::Curve(id, type, params));
}