Exemple #1
0
bool BaseData::setParent(BaseData* parent, const std::string& path)
{
    // First remove previous parents
    while (!this->inputs.empty())
        this->delInput(*this->inputs.begin());
    if (parent && !validParent(parent))
    {
        if (m_owner)
        {
            m_owner->serr << "Invalid Data link from " << (parent->m_owner ? parent->m_owner->getName() : std::string("?")) << "." << parent->getName() << " to " << m_owner->getName() << "." << getName() << m_owner->sendl;
            if (!this->getValueTypeInfo()->ValidInfo())
                m_owner->serr << "  Possible reason: destination Data " << getName() << " has an unknown type" << m_owner->sendl;
            if (!parent->getValueTypeInfo()->ValidInfo())
                m_owner->serr << "  Possible reason: source Data " << parent->getName() << " has an unknown type" << m_owner->sendl;
        }
        return false;
    }
    doSetParent(parent);
    if (!path.empty())
        parentBaseData.set(parent, path);
    if (parent)
    {
        addInput(parent);
        BaseData::setDirtyValue();
        if (!isCounterValid())
            update();

        m_counters[currentAspect()]++;
        m_isSets[currentAspect()] = true;
    }
    return true;
}
Exemple #2
0
void DDGNode::cleanDirty(const core::ExecParams* params)
{
    bool& dirtyValue = dirtyFlags[currentAspect(params)].dirtyValue;
    if (dirtyValue)
    {
        dirtyValue = false;

#ifdef SOFA_DDG_TRACE
        Base* owner = getOwner();
        if (owner)
            owner->sout << "Data " << getName() << " has been updated." << owner->sendl;
#endif

        for(DDGLinkIterator it=inputs.begin(params), itend=inputs.end(params); it != itend; ++it)
            (*it)->dirtyFlags[currentAspect(params)].dirtyOutputs = false;
    }
}
Exemple #3
0
void DDGNode::setDirtyOutputs(const core::ExecParams* params)
{
    bool& dirtyOutputs = dirtyFlags[currentAspect(params)].dirtyOutputs;
    if (!dirtyOutputs)
    {
        dirtyOutputs = true;
        for(DDGLinkIterator it=outputs.begin(params), itend=outputs.end(params); it != itend; ++it)
        {
            (*it)->setDirtyValue(params);
        }
    }
}
Exemple #4
0
void DDGNode::setDirtyValue(const core::ExecParams* params)
{
    bool& dirtyValue = dirtyFlags[currentAspect(params)].dirtyValue;
    if (!dirtyValue)
    {
        dirtyValue = true;

#ifdef SOFA_DDG_TRACE
        // TRACE LOG
        Base* owner = getOwner();
        if (owner)
            owner->sout << "Data " << getName() << " is now dirty." << owner->sendl;
#endif
        setDirtyOutputs(params);
    }
}
Exemple #5
0
void DDGNode::cleanDirty(const core::ExecParams* params)
{
    bool& dirtyValue = dirtyFlags[currentAspect(params)].dirtyValue;
    if (dirtyValue)
    {
        dirtyValue = false;

#ifdef SOFA_DDG_TRACE
        Base* owner = getOwner();
        if (owner)
            owner->sout << "Data " << getName() << " has been updated." << owner->sendl;
#endif

        cleanDirtyOutputsOfInputs(params);
    }
}
Exemple #6
0
void DDGNode::cleanDirtyOutputsOfInputs(const core::ExecParams* params)
{
    for(DDGLinkIterator it=inputs.begin(params), itend=inputs.end(params); it != itend; ++it)
        (*it)->dirtyFlags[currentAspect(params)].dirtyOutputs = false;
}