// sample data structure
struct ENTXDATA {
int Num;
bool bCW;
double Weight;
double Prm[10];
WCHAR Name[32];
int Year;
};
//-----------------------------------------------
// Save information
//-----------------------------------------------
void DemoEntXDataPut (HANDLE hBlock)
{
HANDLE hEnt;
int Key, Size, Id, Flags;
WCHAR* szText = L"This string is stored in entity";
ENTXDATA MyData;
Key = 101;
hEnt = lcDrwGetEntByKey( hBlock, Key );
if (hEnt){
// write text data into the entity
lcPropPutStr( hEnt, LC_PROP_ENT_XSTR, szText );
}
// set fields of 'MyData' structure
Size = sizeof(ENTXDATA);
memset( &MyData, 0, Size );
MyData.Num = 15;
MyData.bCW = true;
MyData.Weight = 1000.0;
MyData.Prm[0] = 5.6;
MyData.Prm[1] = 7.8;
MyData.Prm[2] = 9.123;
wcscpy( MyData.Name, L"Samsung" );
MyData.Year = 2017;
Key = 102;
hEnt = lcDrwGetEntByKey( hBlock, Key );
if (hEnt){
// write binary data into the entity
// allocate memory inside of the entity
Id = 32;
Flags = 9002;
if (lcEntXData( hEnt, Id, Flags, Size )){
// write 'MyData' contents into the entity
lcPropPutHandle( hEnt, LC_PROP_ENT_XDATA, &MyData );
}
}
// write binary data into entity using lcXData... functions
Key = 103;
hEnt = lcDrwGetEntByKey( hBlock, Key );
if (hEnt){
hData = lcXDataBegin();
lcPropPutBool( hData, LC_PROP_XDATA_BOOL, MyData.bCW );
lcPropPutInt( hData, LC_PROP_XDATA_INT, MyData.Num );
lcPropPutFloat( hData, LC_PROP_XDATA_FLOAT, MyData.Weight );
lcPropPutFloat( hData, LC_PROP_XDATA_FLOAT, MyData.Prm[0] );
lcPropPutFloat( hData, LC_PROP_XDATA_FLOAT, MyData.Prm[1] );
lcPropPutFloat( hData, LC_PROP_XDATA_FLOAT, MyData.Prm[2] );
lcPropPutStr( hData, LC_PROP_XDATA_STR, MyData.Name );
lcPropPutInt( hData, LC_PROP_XDATA_INT, MyData.Year );
Size = lcXDataEnd( hData);
// allocate memory inside of the entity
Id = 33;
Flags = 9003;
if (lcEntXData( hEnt, Id, Flags, Size )){
// write temporary buffer (hData) into the entity
lcPropPutHandle( hEnt, LC_PROP_ENT_XDATA, hData );
}
// free temporary buffer
lcXDataClear( hData);
}
}
//-----------------------------------------------
// Retrieve information
//-----------------------------------------------
void DemoEntXDataGet (HANDLE hBlock)
{
HANDLE hEnt;
int Key, Size, Size2, Id, Flags;
BOOL bXStr;
WCHAR szText[256];
ENTXDATA MyData;
Key = 101;
hEnt = lcDrwGetEntByKey( hBlock, Key );
if (hEnt){
// retrieve text data from the entity
// check if XData contains text string
bXStr = lcPropGetBool( hEnt, LC_PROP_ENT_XSTR );
if (bXStr){
// check if the size fits our buffer
Size = lcPropGetInt( hEnt, LC_PROP_ENT_XDATASIZE );
if (0<Size && Size<256){
wcscpy( szText, lcPropGetStr( hEnt, LC_PROP_ENT_XSTR ) );
// now variable 'szText' contains stored text
}
}
}
Key = 102;
hEnt = lcDrwGetEntByKey( hBlock, Key );
if (hEnt){
// retrieve binary data from the entity
Id = lcPropGetInt( hEnt, LC_PROP_ENT_XDATAID );
Flags = lcPropGetInt( hEnt, LC_PROP_ENT_XDATAFLAGS );
Size = lcPropGetInt( hEnt, LC_PROP_ENT_XDATASIZE );
Size2 = sizeof(ENTXDATA);
if (Size == Size2){
memcpy( &MyData, lcPropGetHandle( hEnt, LC_PROP_ENT_XDATA ), Size );
// now variable 'MyData' contains stored data
}
}
// retrieve binary data from entity using lcXDataSet
Key = 103;
hEnt = lcDrwGetEntByKey( hBlock, Key );
if (hEnt){
Size = sizeof(ENTXDATA);
memset( &MyData, 0, Size );
Id = lcPropGetInt( hEnt, LC_PROP_ENT_XDATAID );
Flags = lcPropGetInt( hEnt, LC_PROP_ENT_XDATAFLAGS );
Size = lcPropGetInt( hEnt, LC_PROP_ENT_XDATASIZE );
hData = lcPropGetHandle( hEnt, LC_PROP_ENT_XDATA );
lcXDataSet( hData );
// get data
MyData.bCW = lcPropGetBool( hData, LC_PROP_XDATA_BOOL );
MyData.Num = lcPropGetInt( hData, LC_PROP_XDATA_INT );
MyData.Weight = lcPropGetFloat( hData, LC_PROP_XDATA_FLOAT );
MyData.Prm[0] = lcPropGetFloat( hData, LC_PROP_XDATA_FLOAT );
MyData.Prm[1] = lcPropGetFloat( hData, LC_PROP_XDATA_FLOAT );
MyData.Prm[2] = lcPropGetFloat( hData, LC_PROP_XDATA_FLOAT );
wcscpy( MyData.Name, lcPropGetStr( hData, LC_PROP_XDATA_STR ));
MyData.Year = lcPropGetInt( hData, LC_PROP_XDATA_INT );
}
}