Exemple #1
0
//	neues DGeoObjekt in Liste aufnehmen: als Objekt zum akt. Block (Namen) hinzufügen
//	Symbole werden zerlegt
Bool CBlockTree::AddObject (DGeoObj *&pObject)
{
	try
	{
	//	prüfe Parameter
		assert (pObject && m_pActBlockName && *m_pActBlockName);
		if (!pObject || !m_pActBlockName || !*m_pActBlockName)
		{
			yyerror (IDS_PARAM_ERROR);
			return True; //	weiter parsen
		}

	//	Block suchen
		CTable Tb (*this);
		if (!Tb.Find (m_pActBlockName))
		{
			assert (False);		//	das sollte eigentlich nicht passieren
			return True;
		}

	//	Objekt locken
		CBlockLock pBlock (Tb);		
		if (!pBlock)
		{
			yyerror (IDS_SYSERROR);
			return False;
		}
		
	//	Symbol wird an dieser Stelle zerlegt
		if (DGT_Symbol == pObject -> isA ())
			return Output ((CSymbolObject *)pObject, pBlock->GetDGeoObjListe ());
		else
			return pBlock->AddObject (pObject);
	}
	catch (bad_alloc)
	{
		yyerror (IDS_NOMEMORY);
	}

	return False;
}
Exemple #2
0
//	Neuen Block in Baum anlegen
Bool CBlockTree :: CreateBlock (char *pBlockName, double dXBasis, double dYBasis)
{
	try
	{
	//	akt. Block wird ungültig
		DELETE_VEC (m_pActBlockName);

	//	prüfe Blocknamen
		if (!pBlockName || !*pBlockName)
			return True;

	//	wurde der Block bereits gespeichert ?
		CTable Tb (*this);
		if (Tb.Find (pBlockName))
		{
			assert (False);		//	das sollte eigentlich nicht passieren
			return True;
		}

	//	Block speichern
		CBlockCreator BC (*this);
		CBlock *pBlock = ContCreate (BC, CBlock);
		Bool bRet = pBlock && pBlock -> Init (pBlockName, dXBasis, dYBasis);

	//	akt. Blocknamen merken
		if (bRet)
		{
			m_pActBlockName = new char [strlen (pBlockName) + 1];
			strcpy (m_pActBlockName, pBlockName);
		}

		return bRet;
	}
	catch (bad_alloc)
	{
		yyerror (IDS_NOMEMORY);
	}

	return False;
}
Exemple #3
0
//	Block ausgeben
Bool CBlockTree::Output (CSymbolObject *pSymbol, CDGeoObjListe *pGeoListe)					//	Objekte an akt
{
//	prüfe Parameter
	assert (NULL != pSymbol);
	if (!pSymbol)
	{
		yyerror (IDS_SYSERROR);
		return False;
	}		

//	prüfe Blocknamen
	char *pBlockName = (char *)pSymbol->GetBlockName();
	if (!pBlockName || !*pBlockName)
	{
		assert (False);					//	sollte auch nicht passieren
		return True;					//	weiter parsen
	}

//	Block suchen und ausgeben
	CTable Tb (*this);
	if (!Tb.Find (pBlockName))
	{
		assert (False);					//	sollte eigentlich nicht passieren
		return True;					//	weiter parsen
	}
	else
	{
	//	Objekt gültig ?
		if (!Tb.Valid ())
		{
			yyerror (IDS_SYSERROR);
			return False;
		}

	//	Objekt locken
		CBlockLock pBlock (Tb);		
		if (!pBlock)
		{
			yyerror (IDS_SYSERROR);
			return False;
		}

	//	diesen Block entsprechend Zeilen und Spalten ausgeben
	//	Parameter init.
		int iRows = pSymbol->Zeilen ();
		int iCols = pSymbol->Spalten ();
		
	//	Parameter prüfen
		assert ((iRows >= 1) && (iCols >= 1) && pSymbol->GetMerkmalsListe ()); 
		if ((iRows < 1) || (iCols < 1) || !pSymbol->GetMerkmalsListe ())
		{
			yyerror (IDS_PARAM_ERROR);
			return True;		//	weiter parsen
		}

	//	Blöcke ausgeben
		double dYOffset = 0;
		for (int i = 0; i < iRows; i++, dYOffset += pSymbol->ZeilenAbstand ())
		{
			double dXOffset = 0;
			for (int j = 0; j < iCols; j++, dXOffset += pSymbol->SpaltenAbstand ())
			{
			//	Block ausgeben
				if (!pBlock -> Output (pSymbol->GetIdent (),		
									   pSymbol->GetMerkmalsListe (),
									   pSymbol->XInsert (), pSymbol->YInsert (),
									   pSymbol->XMasstab (), pSymbol->YMasstab (),
									   pSymbol->GetWinkel (), 
									   dXOffset, dYOffset,
									   pGeoListe))
					return False;
			}
		}
	}
	
	return TRUE;
}
Exemple #4
0
// 	lese Merkmalskode aus dem Baum
//	wenn nicht vorhanden, einen neuen von Trias holen und diesen in der PBD
//	speichern
//Bool MerkmalsBaum :: GetMerkmalsKode (char *pMName, ulong &MKode) 
Bool MerkmalsBaum :: GetMerkmalsKode (char *pMName, ulong &MKode, long lONr) 
// KK990927
{
	const short MaxLen = 20; 		// max. Namenslänge

//  gültiger Name ?
	if (!pMName)
	{
		yyerror (IDS_SYSERROR);
		return False;
	}

//	gültiger Wert ?
	char *pTempName = NULL;
	if (!*pMName)	// evtl. Standard-Namen erzeugen
	{
		ResString strStandard (ResID (IDS_ST_MK_KT, &g_pTE -> RF ()), MaxLen);				
		pTempName = new char [MaxLen + 1];
		if (!pTempName)
		{
			yyerror (IDS_NOMEMORY);
			return False;
		}
		lstrcpy (pTempName, (char *) strStandard.Addr ());
		pMName = pTempName;
	}

//  prüfen, ob Eintrag existiert ?
	Bool bRet = False;		// noch nichts getan	
	CTable Tb (*this);

	if (Tb.Find (pMName)) 	 // Namen suchen
	{
		if (Tb.Valid ())
		{
			MerkmalLock pM (Tb);		
			if (pM)
			{
				MKode = pM -> MerkmalsKode ();
				bRet = True;					
			}
		}
	}
	else
	{// neuen Eintrag erzeugen
		MKode = DEX_GetUniqueMCode ();		// unique MK von Trias holen
// KK990927
		ulong lIdent = DEX_GetObjIdent(lONr);
//		if (CreateMerkmal (MKode, pMName, MaxMerkmalsLen) == EC_OKAY)
		if (CreateMerkmal (MKode, pMName, MaxMerkmalsLen, lIdent) == EC_OKAY)
		{
			MerkmalCreator MC (*this);
			Merkmal *pM = ContCreate (MC, Merkmal);
			bRet = pM && pM -> Init (pMName, MKode);
		}
	}

//	ggf. Speicher freigeben
	DELETE_VEC (pTempName);

//	ggf. Fehlermeldung ausgeben
 	if (bRet == False)
		yyerror (IDS_SYSERROR);

	return bRet;
}