示例#1
0
bool CEditableObject::VerifyBoneParts()
{
	U8Vec b_use(BoneCount(),0);
    for (BPIt bp_it=m_BoneParts.begin(); bp_it!=m_BoneParts.end(); bp_it++)
        for (int i=0; i<int(bp_it->bones.size()); i++){
        	int idx = FindBoneByNameIdx(bp_it->bones[i].c_str());
            if (idx==-1){
            	bp_it->bones.erase(bp_it->bones.begin()+i);
            	i--;
            }else{
	        	b_use[idx]++;
            }
        }

    for (U8It u_it=b_use.begin(); u_it!=b_use.end(); u_it++)
    	if (*u_it!=1) return false;
    return true;
}
示例#2
0
void __fastcall TfrmBonePart::ebSaveClick(TObject *Sender)
{
    for (int k=0; k<4; k++) {
        if (T[k]->Items->Count&&E[k]->Text.IsEmpty()) {
            ELog.DlgMsg(mtError,"Verify parts name.");
            return;
        }
        for (int i=k-1; i>=0; i--) {
            if (!T[k]->Items->Count) continue;
            if (E[k]->Text.UpperCase()==E[i]->Text.UpperCase()) {
                ELog.DlgMsg(mtError,"Unique name required.");
                return;
            }
        }
    }

    // verify
    U8Vec b_use(m_EditObject->BoneCount(),0);
    for (k=0; k<4; k++) {
        if (T[k]->Items->Count)
            for ( TElTreeItem* node = T[k]->Items->GetFirstNode(); node; node = node->GetNext())
                b_use[m_EditObject->FindBoneByNameIdx(AnsiString(node->Text).c_str())]++;
    }
    for (U8It u_it=b_use.begin(); u_it!=b_use.end(); u_it++)
        if (*u_it!=1) {
            ELog.DlgMsg	(mtError,"Invalid bone part found (missing or duplicate bones).");
            return;
        }

    // save
    m_BoneParts->clear();
    for (k=0; k<4; k++) {
        if (T[k]->Items->Count) {
            m_BoneParts->push_back(SBonePart());
            SBonePart& BP = m_BoneParts->back();
            BP.alias = E[k]->Text.c_str();
            for ( TElTreeItem* node = T[k]->Items->GetFirstNode(); node; node = node->GetNext())
                BP.bones.push_back(AnsiString(node->Text).c_str());
        }
    }
    ATools->OnMotionDefsModified();
    Close();
    ModalResult = mrOk;
}