00001
00043 #define _EXPORT_CCL_
00044
00045
00046 #include "CigiSymbolTextDefV3_3.h"
00047 #include "CigiSwapping.h"
00048 #include "CigiExceptions.h"
00049
00050
00051 using namespace std;
00052
00053
00054
00055
00056
00057
00058
00059
00060 CigiSymbolTextDefV3_3::CigiSymbolTextDefV3_3(void)
00061 {
00062 PacketID = CIGI_SYMBOL_TEXT_DEFINITION_PACKET_ID_V3_3;
00063 PacketSize = CIGI_SYMBOL_TEXT_DEFINITION_PACKET_SIZE_V3_3;
00064 Version = 3;
00065 MinorVersion = 3;
00066 VariableDataSize = 4;
00067
00068 SymbolID = 0;
00069 Alignment = TopLeft;
00070 Orientation = LeftToRight;
00071 FontID = 0;
00072 FontSize = 10.0;
00073 Text.clear();
00074 }
00075
00076
00077
00078
00079 CigiSymbolTextDefV3_3::~CigiSymbolTextDefV3_3(void)
00080 {
00081 }
00082
00083
00084
00085
00086 CigiSymbolTextDefV3_3::CigiSymbolTextDefV3_3(const std::string &TextIn)
00087 {
00088 PacketID = CIGI_SYMBOL_TEXT_DEFINITION_PACKET_ID_V3_3;
00089 PacketSize = CIGI_SYMBOL_TEXT_DEFINITION_PACKET_SIZE_V3_3;
00090 Version = 3;
00091 MinorVersion = 3;
00092 VariableDataSize = 4;
00093
00094 SymbolID = 0;
00095 Alignment = TopLeft;
00096 Orientation = LeftToRight;
00097 FontID = 0;
00098 FontSize = 10.0;
00099
00100 SetText(TextIn,false);
00101 }
00102
00103
00104
00105
00106 CigiSymbolTextDefV3_3::CigiSymbolTextDefV3_3(const CigiSymbolTextDefV3_3 &BaseIn)
00107 : CigiBaseSymbolTextDef((CigiBaseSymbolTextDef &)BaseIn)
00108 {
00109 PacketID = CIGI_SYMBOL_TEXT_DEFINITION_PACKET_ID_V3_3;
00110 PacketSize = CIGI_SYMBOL_TEXT_DEFINITION_PACKET_SIZE_V3_3;
00111 Version = 3;
00112 MinorVersion = 3;
00113 }
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 int CigiSymbolTextDefV3_3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00125 {
00126 PackPointer CDta;
00127
00128 CigiSymbolTextDefV3_3 * Data =
00129 ( CigiSymbolTextDefV3_3 *)Base;
00130
00131 CDta.c = Buff;
00132
00133 *CDta.c++ = PacketID;
00134 *CDta.c++ = (PacketSize + Data->VariableDataSize);
00135
00136 *CDta.s++ = Data->SymbolID;
00137
00138 unsigned char HDta = 0;
00139 HDta |= (Data->Alignment & 0x0F);
00140 HDta |= ((Data->Orientation << 4) & 0x30);
00141 *CDta.c++ = HDta;
00142
00143 *CDta.c++ = Data->FontID;
00144 *CDta.s++ = 0;
00145
00146 *CDta.f++ = Data->FontSize;
00147
00148 int tSz = Data->Text.size();
00149 memcpy(CDta.c,Data->Text.c_str(),tSz);
00150 CDta.c += tSz;
00151 memset(CDta.c,0,(Data->VariableDataSize - tSz));
00152
00153 return(PacketSize + Data->VariableDataSize);
00154
00155 }
00156
00157
00158
00159
00160 int CigiSymbolTextDefV3_3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00161 {
00162 PackPointer CDta;
00163 unsigned char HDta = 0;
00164
00165 CDta.c = Buff;
00166
00167 CDta.c++;
00168
00169
00170 VariableDataSize = *CDta.c - CIGI_SYMBOL_TEXT_DEFINITION_PACKET_SIZE_V3_3;
00171 CDta.c++;
00172
00173 if(!Swap)
00174 {
00175 SymbolID = *CDta.s++;
00176
00177 HDta = *CDta.c++;
00178
00179 FontID = *CDta.c++;
00180
00181 CDta.s++;
00182
00183 FontSize = *CDta.f++;
00184 }
00185 else
00186 {
00187 CigiSwap2(&SymbolID, CDta.s++);
00188
00189 HDta = *CDta.c++;
00190
00191 FontID = *CDta.c++;
00192
00193 CDta.s++;
00194
00195 CigiSwap4(&FontSize, CDta.f++);
00196 }
00197
00198 #ifdef WIN32
00199
00200
00201 Text = (char*)CDta.c;
00202 #elif defined( __GNUC__ )
00203
00204
00205
00206
00207 Text.assign( (char*)CDta.c, strnlen( (char*)CDta.c, VariableDataSize ) );
00208 #else
00209
00210
00211
00212 Text = (char*)CDta.c;
00213 #endif
00214
00215 Alignment = (AlignmentGrp)(HDta & 0x0f);
00216 Orientation = (OrientationGrp)((HDta >> 4) & 0x03);
00217
00218 return(PacketSize + VariableDataSize);
00219
00220 }
00221
00222
00223
00224