void Scheme::AddEquivalence (DOF1 nnode1, DOF1 nnode2) { int num1, num2; bool isb1, isb2, ise1, ise2; QString node1, node2; bool isbn1, isbn2, isen1, isen2; bool isBase, isExt; bool isOK; GetEqvList(); node1 = nnode1.GetObjectName(); node2 = nnode2.GetObjectName(); // printf ("Scheme:1 %s, %s\n", node1.toAscii().data(), node2.toAscii().data()); isbn1 = nnode1.GetBase(); isbn2 = nnode2.GetBase(); isen1 = nnode1.GetExternal(); isen2 = nnode2.GetExternal(); // printf ("Scheme:1.1 isen1=%d isen2=%d\n", isen1, isen2); isb1=ise1=isb2=ise2 = false; num1 = FindDOF (node1, isb1, ise1); // printf ("Scheme:1.2. num1=%d\n",num1); num2 = FindDOF (node2, isb2, ise2); // printf ("Scheme:1.3. num2=%d\n",num2); isBase = isb1 || isb2 || isbn1 || isbn2; isExt = ise1 || ise2 || isen1 || isen2; // printf ("Scheme:2\n"); if (num1==-1 && num2 == -1) { TElement var (EqvList.Add()); // printf ("Scheme:3\n"); TList doflist; var.AddElement(doflist); doflist.SetName ("doflist"); // printf ("Scheme:4\n"); TString n1 (doflist.Add()); TString n2 (doflist.Add()); n1.SetValue (node1); n2.SetValue (node2); // printf ("Scheme:5\n"); TInteger base; var.AddElement(base); base.SetName ("isBase"); base.SetValue (isBase); TInteger ext; var.AddElement(ext); ext.SetName ("isExt"); ext.SetValue (isExt); }else if (num1==-1) { TElement el (EqvList.GetAt(num2)); TList doflist (el.GetField ("doflist", isOK)); TInteger isb (el.GetField ("isBase", isOK)); TInteger ise (el.GetField ("isExt", isOK)); isb.SetValue (isBase); ise.SetValue (isExt); TString n1 (doflist.Add()); n1.SetValue (node1); }else if (num2==-1) { TElement el (EqvList.GetAt(num1)); TList doflist (el.GetField ("doflist", isOK)); TInteger isb (el.GetField ("isBase", isOK)); TInteger ise (el.GetField ("isExt", isOK)); isb.SetValue (isBase); ise.SetValue (isExt); TString n2 (doflist.Add()); n2.SetValue (node2); }else if (num1 != num2) { TElement el (EqvList.GetAt(num1)); TList doflist1 (el.GetField ("doflist", isOK)); TInteger isb (el.GetField ("isBase", isOK)); TInteger ise (el.GetField ("isExt", isOK)); isb.SetValue (isBase); ise.SetValue (isExt); el.Init (EqvList.GetAt(num2)); TList doflist2 (el.GetField ("doflist", isOK)); // TList doflist2 (EqvList.GetAt(num2)); TIterator it (doflist2.GetIterator()); while (it.More()) { TString n1 (it.Value()); QString value = n1.GetValue(); TString n2 (doflist1.Add()); n2.SetValue (value); it.Next(); } EqvList.RemoveVar (el); } return; }