Exemplo n.º 1
0
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;
}