15
typedef double DOUBLE;
16
typedef unsigned long DWORD, *LPDWORD;
17
typedef unsigned short WORD, *LPWORD;
18
typedef unsigned char BYTE, *LPBYTE;
22
typedef struct _DPoint{
28
typedef struct _JWWLay{
30
DWORD m_aanLayProtect;
33
typedef struct _JWWGLay{
37
DWORD m_anGLayProtect;
41
typedef struct _JWWZoom{
42
DOUBLE m_dZoomJumpBairitsu;
43
DPoint m_DPZoomJumpGenten;
44
DWORD m_nZoomJumpGLay;
47
typedef struct _JWWPen{
54
DWORD m_anPrtPenWidth;
55
DOUBLE m_adPrtTenHankei;
58
typedef struct JWWLType1{
60
DWORD m_anTokushusSenUnitDot;
61
DWORD m_anTokushuSenPich;
62
DWORD m_anPrtTokushuSenPich;
65
typedef struct _JWWLType2{
67
DWORD m_anRandSenWide;
68
DWORD m_anTokushuSenPich;
69
DWORD m_anPrtRandSenWide;
70
DWORD m_anPrtTokushuSenPich;
73
typedef struct _JWWLType3{
75
DWORD m_anTokushusSenUnitDot;
76
DWORD m_anTokushuSenPich;
77
DWORD m_anPrtTokushuSenPich;
80
typedef struct _JWWaMoji{
88
typedef struct _SXFCOL {
90
DWORD m_aPenColor[357];
91
DWORD m_anPenWidth[357];
93
string m_astrUDColorName[257];
94
DWORD m_aPrtPenColor[357];
95
DWORD m_anPrtPenWidth[357];
96
DOUBLE m_adPrtTenHankei[357];
100
typedef struct _SXFLTP {
102
DWORD m_anTokushuSenUintDot[63];
103
DWORD m_anTokushuSenPich[63];
104
DWORD m_anPrtTokushuSenPich[63];
105
string m_astrUDLTypeName[33];
106
DWORD m_anUDLTypeSegment[33];
107
DOUBLE m_aadUDLTypePitch[33][11];
116
string head; //JWWのデータファイルの宣言
117
DWORD JW_DATA_VERSION; //バージョンNo.
118
string m_strMemo; //ファイルメモ
119
DWORD m_nZumen; //図面サイズ
120
DWORD m_nWriteGLay; //レイヤグループ・レイヤ状態
121
JWWGLay GLay[16]; //レイヤグループ・レイヤ状態
122
DWORD Dummy[14]; //ダミー
123
DWORD m_lnSunpou1; //寸法関係の設定
129
DWORD m_nMaxDrawWid;//線描画の最大幅
130
DPoint m_DPPrtGenten; //プリンタ出力範囲の原点(X,Y)
131
DOUBLE m_dPrtBairitsu; //プリンタ出力倍率
132
DWORD m_nPrt90Kaiten; //プリンタ90°回転出力、プリンタ出力基準点位置
133
DWORD m_nMemoriMode; //目盛設定モード
134
DOUBLE m_dMemoriHyoujiMin; //目盛表示最小間隔ドット
135
DOUBLE m_dMemoriX; //目盛表示間隔X
136
DOUBLE m_dMemoriY; //目盛表示間隔Y
137
DPoint m_DpMemoriKijunTen; //目盛基準点(X,Y)
138
string m_aStrLayName[16][16]; //レイヤ名
139
string m_aStrGLayName[16]; //レイヤグループ名
140
DOUBLE m_dKageLevel; //日影計算の条件 測定面高さ
141
DOUBLE m_dKageIdo; //緯度
142
DWORD m_nKage9_15Flg; //9縲・5の測定の指定
143
DOUBLE m_dKabeKageLevel; //壁面日影測定面高さ
144
DOUBLE m_dTenkuuZuLevel; //天空図の条件(Ver.3.00以降) 測定面高さ
145
DOUBLE m_dTenkuuZuEnkoR; //天空図の半径*2
146
DWORD m_nMMTani3D; //2.5Dの計算単位(0以外はmm単位で計算)
147
DOUBLE m_dBairitsu; //保存時の画面倍率(読込むと前画面倍率になる)
149
DOUBLE m_dHanniBairitsu; //範囲記憶倍率と基準点(X,Y)
150
DPoint m_DPHanniGenten;
151
JWWZoom m_dZoom[9]; //マークジャンプ倍率、基準点(X,Y)およびレイヤグループ
158
DOUBLE m_dMojiBG; //(Ver.4.04以前はダミー)文字列範囲を背景色で描画するときの範囲増寸法
160
DOUBLE m_adFukusenSuuchi[10]; //複線間隔
161
DOUBLE m_dRyoygawaFukusenTomeDe; //両側複線の留線出の寸法
162
JWWPen m_Pen[10]; //色番号ごとの画面表示色、線幅
163
JWWPrtPen m_PrtPen[10]; //色番号ごとのプリンタ出力色、線幅、実点半径
164
JWWLType1 m_alLType1[10];//線種番号2から9までのパターン、1ユニットのドット数、ピッチ、プリンタ出力ピッチ
165
JWWLType2 m_alLType2[16]; //ランダム線1から5までのパターン、画面表示振幅・ピッチ、プリンタ出力振幅・ピッチ
166
JWWLType3 m_alLType3[20]; //倍長線種番号6から9までのパターン、1ユニットのドット数、ピッチ、プリンタ出力ピッチ
167
DWORD m_nDrawGamenTen; //実点を画面描画時の指定半径で描画
168
DWORD m_nDrawPrtTen; //実点をプリンタ出力時、指定半径で書く
169
DWORD m_nBitMapFirstDraw; //BitMap・ソリッドを最初に描画する
170
DWORD m_nGyakuDraw; //逆描画
171
DWORD m_nGyakuSearch; //逆サーチ
172
DWORD m_nColorPrint; //カラー印刷
173
DWORD m_nLayJunPrint; //レイヤ順の印刷
174
DWORD m_nColJunPrint; //色番号順の印刷
175
DWORD m_nPrtRenzoku; //レイヤグループまたはレイヤごとのプリンタ連続出力指定
176
DWORD m_nPrtKyoutuuGray; //プリンタ共通レイヤ(表示のみレイヤ)のグレー出力指定
177
DWORD m_nPrtDispOnlyNonDraw; //プリンタ出力時に表示のみレイヤは出力しない
178
DWORD m_lnDrawTime; //作図時間(Ver.2.23以降)
179
DWORD nEyeInit; //2.5Dの始点位置が設定されている時のフラグ(Ver.2.23以降)
180
DWORD m_dEye_H_Ichi_1; //2.5Dの透視図・鳥瞰図・アイソメ図の視点水平角(Ver.2.23以降)
181
DWORD m_dEye_H_Ichi_2; //
182
DWORD m_dEye_H_Ichi_3; //
183
DOUBLE m_dEye_Z_Ichi_1; //2.5Dの透視図の視点高さ・視点離れ(Ver.2.23以降)
184
DOUBLE m_dEye_Y_Ichi_1; //
185
DOUBLE m_dEye_Z_Ichi_2; //2.5Dの鳥瞰図の視点高さ・視点離れ(Ver.2.23以降)
186
DOUBLE m_dEye_Y_Ichi_2; //
187
DOUBLE m_dEye_V_Ichi_3; //2.5Dのアイソメ図の視点垂直角(Ver.2.23以降)
188
DOUBLE m_dSenNagasaSunpou; //線の長さ指定の最終値(Ver.2.25以降)
189
DOUBLE m_dBoxSunpouX; //矩形寸法横寸法・縦寸法指定の最終値(Ver.2.25以降)
190
DOUBLE m_dBoxSunpouY;
191
DOUBLE m_dEnHankeySunpou; //円の半径指定の最終値(Ver.2.25以降)
192
DWORD m_nSolidNinniColor; //ソリッドを任意色で書くフラグ、ソリッドの任意色の既定値(Ver.2.30以降)
193
DWORD m_SolidColor; //RGB
194
SXFCOL m_SxfCol; //SXF対応拡張線色定義(Ver.4.20以降)
195
SXFLTP m_SxfLtp; //SXF対応拡張線種定義(Ver.4.20以降)
196
JWWaMoji m_Moji[11];//文字種1から10までの文字幅、高さ、間隔、色番号
197
DOUBLE m_dMojiSizeX; //書込み文字の文字幅
198
DOUBLE m_dMojiSizeY; //書込み文字の高さ
199
DOUBLE m_dMojiKankaku; //間隔
200
DWORD m_nMojiColor; //色番号
201
DWORD m_nMojiShu; //文字番号
202
DOUBLE m_dMojiSeiriGyouKan; //文字位置整理の行間
203
DOUBLE m_dMojiSeiriSuu; //文字数
204
DWORD m_nMojiKijunZureOn; //文字基準点のずれ位置使用のフラグ
205
DOUBLE m_adMojiKijunZureX[3]; //文字基準点の横方向のずれ位置左、中、右
206
DOUBLE m_adMojiKijunZureY[3]; //文字基準点の縦方向のずれ位置下、中、上
216
DWORD nOldVersionSave; //バージョンNo.
218
DWORD m_lGroup;//曲線属性番号
219
BYTE m_nPenStyle;//線種番号
220
WORD m_nPenColor;//線色番号
221
/////////////////////////////////////////////////
222
WORD m_nPenWidth;//線色幅 Ver.3.51以降
223
/////////////////////////////////////////////////
224
WORD m_nLayer;//レイヤ番号
225
WORD m_nGLayer;//レイヤグループ番号
229
const char* className(){return "CData";}
230
friend inline std::ostream& operator<<(std::ostream&, const CData&);
231
friend inline std::istream& operator>>(std::istream&, CData&);
232
void SetVersion(DWORD ver){ nOldVersionSave = ver; }
233
void Serialize(std::ofstream& ofstr){
234
ofstr << (DWORD)m_lGroup; //曲線属性番号
235
ofstr << (BYTE)m_nPenStyle; //線種番号
236
ofstr << (WORD)m_nPenColor; //線色番号
237
if( nOldVersionSave >= 351 ){ //Ver.3.51以降
238
ofstr << (WORD)m_nPenWidth;//線色幅
240
ofstr << (WORD)m_nLayer; //レイヤ番号
241
ofstr << (WORD)m_nGLayer; //レイヤグループ番号
242
ofstr << (WORD)m_sFlg; //属性フラグ
244
void Serialize(std::ifstream& ifstr){
245
ifstr >> /*(DWORD)*/m_lGroup; //曲線属性番号
246
ifstr >> /*(BYTE)*/m_nPenStyle; //線種番号
247
ifstr >> /*(WORD)*/m_nPenColor; //線色番号
248
if( nOldVersionSave >= 351 ){ //Ver.3.51以降
249
ifstr >> /*(WORD)*/m_nPenWidth;//線色幅
251
ifstr >> /*(WORD)*/m_nLayer; //レイヤ番号
252
ifstr >> /*(WORD)*/m_nGLayer; //レイヤグループ番号
253
ifstr >> /*(WORD)*/m_sFlg; //属性フラグ
256
inline std::ostream& operator<< (std::ostream& ostr, const CData& output)
258
ostr << "曲線属性番号:" << (DWORD)output.m_lGroup; //曲線属性番号
259
ostr << "線種番号:" << (BYTE)output.m_nPenStyle; //線種番号
260
ostr << "線色番号:" << (WORD)output.m_nPenColor; //線色番号
261
if( output.nOldVersionSave >= 351 ){ //Ver.3.51以降
262
ostr << "線色幅:" << (WORD)output.m_nPenWidth;//線色幅
264
ostr << "レイヤ番号:" << (WORD)output.m_nLayer; //レイヤ番号
265
ostr << "レイヤグループ番号:" << (WORD)output.m_nGLayer; //レイヤグループ番号
266
ostr << "属性フラグ:" << (WORD)output.m_sFlg; //属性フラグ
270
inline std::istream& operator>> (std::istream& istr, CData& input)
272
istr >> input.m_lGroup; //曲線属性番号
273
istr >> input.m_nPenStyle; //線種番号
274
istr >> input.m_nPenColor; //線色番号
275
if( input.nOldVersionSave >= 351 ){ //Ver.3.51以降
276
istr >> input.m_nPenWidth;//線色幅
278
istr >> input.m_nLayer; //レイヤ番号
279
istr >> input.m_nGLayer; //レイヤグループ番号
280
istr >> input.m_sFlg; //属性フラグ
281
// ifstr.read((char*)&(input.data), sizeof(int));
286
-------------------------------------------------------------------------------
287
データ 線 円 実点 文字 ブロック 寸法 ソリッド
288
-------------------------------------------------------------------------------
290
(0x0020)ハッチ ハッチ ハッチ 縦字 ハッチ
300
(0x8000)包絡処理対象外の建具 2.5D
301
-------------------------------------------------------------------------------
305
class CDataSen : public CData
308
DPoint m_start;//始点X座標、Y座標
309
DPoint m_end;//終点X座標、Y座標
312
const char* className(){return "CDataSen";}
313
friend inline std::ostream& operator<<(std::ostream&, const CDataSen&);
314
friend inline std::istream& operator>>(std::istream&, CDataSen&);
315
void Serialize(std::ofstream& ofstr)
316
#ifdef _MSC_VER // TODO VC 7.1 gives overload error.
320
CData::Serialize(ofstr);
321
ofstr << (double)m_start.x << (double)m_start.y
322
<< (double)m_end.x << (double)m_end.y;
325
void Serialize(std::ifstream& ifstr){
326
CData::Serialize(ifstr);
327
ifstr >> m_start.x >> m_start.y
328
>> m_end.x >> m_end.y;
331
inline std::ostream& operator<< (std::ostream& ostr, const CDataSen& output)
333
ostr << (double)output.m_start.x << " " << (double)output.m_start.y << endl
334
<< (double)output.m_end.x << " " << (double)output.m_end.y << endl;
338
inline std::istream& operator>> (std::istream& istr, CDataSen& input)
340
istr >> input.m_start.x >> input.m_start.y
341
>> input.m_end.x >> input.m_end.y;
344
typedef CDataSen* PCDataSen;
347
class CDataEnko : public CData
350
DPoint m_start;//中心点X座標、Y座標
351
DOUBLE m_dHankei;//半径
352
DOUBLE m_radKaishiKaku;//開始角
353
DOUBLE m_radEnkoKaku;//円弧角
354
DOUBLE m_radKatamukiKaku;//傾き角
355
DOUBLE m_dHenpeiRitsu;//扁平率
356
DWORD m_bZenEnFlg;//全円フラグ
359
const char* className(){return "CDataEnko";}
360
friend inline std::ostream& operator<<(std::ostream&, const CDataEnko&);
361
friend inline std::istream& operator>>(std::istream&, CDataEnko&);
362
void Serialize(std::ofstream& ofstr)
367
CData::Serialize(ofstr);
368
ofstr << (double)m_start.x << (double)m_start.y
370
<< (double)m_radKaishiKaku
371
<< (double)m_radEnkoKaku
372
<< (double)m_radKatamukiKaku
373
<< (double)m_dHenpeiRitsu
374
<< (DWORD )m_bZenEnFlg;
377
void Serialize(std::ifstream& ifstr){
378
CData::Serialize(ifstr);
379
ifstr >> /*(double)*/m_start.x >> /*(double)*/m_start.y
380
>> /*(double)*/m_dHankei
381
>> /*(double)*/m_radKaishiKaku
382
>> /*(double)*/m_radEnkoKaku
383
>> /*(double)*/m_radKatamukiKaku
384
>> /*(double)*/m_dHenpeiRitsu
385
>> /*(DWORD)*/m_bZenEnFlg;
388
typedef CDataEnko* PCDataEnko;
389
inline std::ostream& operator<< (std::ostream& ostr, const CDataEnko& output)
391
ostr << (double)output.m_start.x << " " << (double)output.m_start.y << endl
392
<< (double)output.m_dHankei << endl
393
<< (double)output.m_radKaishiKaku << endl
394
<< (double)output.m_radEnkoKaku << endl
395
<< (double)output.m_radKatamukiKaku << endl
396
<< (double)output.m_dHenpeiRitsu << endl
397
<< (DWORD )output.m_bZenEnFlg << endl;
401
inline std::istream& operator>> (std::istream& istr, CDataEnko& input)
403
istr >> input.m_start.x >> input.m_start.y
405
>> input.m_radKaishiKaku
406
>> input.m_radEnkoKaku
407
>> input.m_radKatamukiKaku
408
>> input.m_dHenpeiRitsu
409
>> input.m_bZenEnFlg;
414
class CDataTen : public CData
417
DPoint m_start; //点X座標、Y座標
418
DWORD m_bKariten;//仮点フラグ
419
DWORD m_nCode; //m_nPenStyleが「100」のとき点コード(矢印・ポイントマーカー)
420
DOUBLE m_radKaitenKaku; //表示角
421
DOUBLE m_dBairitsu; //表示倍率
424
const char* className(){return "CDataTen";}
425
friend inline std::ostream& operator<<(std::ostream&, const CDataTen&);
426
friend inline std::istream& operator>>(std::istream&, CDataTen&);
427
void Serialize(std::ofstream& ofstr)
433
if( nOldVersionSave >= 252 ){ //Ver.2.52以降
434
if( 0 != m_nCode ){ m_nPenStyle = 100; }
436
CData::Serialize(ofstr);
438
ofstr << (double)m_start.x << (double)m_start.y;
439
ofstr << (DWORD)m_bKariten;
440
if( 100 == m_nPenStyle ){
441
ofstr << (DWORD )m_nCode;
442
ofstr << (double)m_radKaitenKaku;
443
ofstr << (double)m_dBairitsu;
447
void Serialize(std::ifstream& ifstr){
448
CData::Serialize(ifstr);
449
ifstr >> m_start.x >> m_start.y;
451
if( 100 == m_nPenStyle ){
453
ifstr >> m_radKaitenKaku;
454
ifstr >> m_dBairitsu;
458
typedef CDataTen* PCDataTen;
459
inline std::ostream& operator<< (std::ostream& ostr, const CDataTen& output)
461
ostr << "x:" <<(double)output.m_start.x << " y:" << (double)output.m_start.y << endl;
462
ostr << (DWORD)output.m_bKariten << endl;
463
if( 100 == output.m_nPenStyle ){
464
ostr << (DWORD )output.m_nCode << endl;
465
ostr << (double)output.m_radKaitenKaku << endl;
466
ostr << (double)output.m_dBairitsu << endl;
471
inline std::istream& operator>> (std::istream& istr, CDataTen& /*input*/)
477
class CDataMoji : public CData
480
DPoint m_start;//始点X座標、Y座標
481
DPoint m_end;//終点X座標、Y座標
482
DWORD m_nMojiShu;//文字種(斜体文字は20000、ボールド体は10000を加えた数値)
483
DOUBLE m_dSizeX;//文字サイズ横
484
DOUBLE m_dSizeY;//文字サイズ縦
485
DOUBLE m_dKankaku;//文字間隔
486
DOUBLE m_degKakudo;//角度
487
string m_strFontName;//フォント名
488
string m_string;//文字列
491
const char* className(){return "CDataEnko";}
492
friend inline std::ostream& operator<<(std::ostream&, const CDataMoji&);
493
friend inline std::istream& operator>>(std::istream&, CDataMoji&);
494
void Serialize(std::ofstream& ofstr)
499
////////////////////////////////////////////
500
//SKIP m_nPenWidth = m_nSunpouFlg; // (寸法値設定のフラグ)ヘッダーメンバー
501
CData::Serialize(ofstr);
502
m_nPenWidth = 1; //文字枠幅を1
503
//SKIP if( m_sMojiFlg & 0x0001 ){ m_nMojiShu += 10000; } //斜体文字
504
//SKIP if( m_sMojiFlg & 0x0010 ){ m_nMojiShu += 20000; } //ボールド
506
ofstr << (double)m_start.x << (double)m_start.y
507
<< (double)m_end.x << (double)m_end.y
509
<< (double)m_dSizeX << (double)m_dSizeY
510
<< (double)m_dKankaku
511
<< (double)m_degKakudo;
513
int len = m_strFontName.length();
524
ofstr.write(m_strFontName.c_str(),len);
526
len = m_string.length();
537
ofstr.write(m_string.c_str(),len);
539
m_nMojiShu = (m_nMojiShu % 10000);
542
void Serialize(std::ifstream& ifstr){
543
CData::Serialize(ifstr);
544
ifstr >> m_start.x >> m_start.y
545
>> m_end.x >> m_end.y
547
>> m_dSizeX >> m_dSizeY
559
cout << "MojiData1:" << m_strFontName << endl;
568
cout << "MojiData2:" << m_strFontName << endl;
577
cout << "MojiData3:" << m_string << endl;
586
cout << "MojiData4:" << m_string << endl;
589
/* m_nPenWidth = 1; //文字枠幅を1
590
if( m_sMojiFlg & 0x0001 ){ m_nMojiShu += 10000; } //斜体文字
591
if( m_sMojiFlg & 0x0010 ){ m_nMojiShu += 20000; } //ボールド
592
m_nMojiShu = (m_nMojiShu % 10000);
593
m_nPenWidth = m_nSunpouFlg; // (寸法値設定のフラグ)
597
typedef CDataMoji* PCDataMoji;
598
inline std::ostream& operator<< (std::ostream& ostr, const CDataMoji& /*output*/)
603
inline std::istream& operator>> (std::istream& istr, CDataMoji& /*input*/)
610
class CDataSunpou : public CData
613
CDataSen m_Sen; //線分メンバ
614
CDataMoji m_Moji; //文字メンバ
615
WORD m_bSxfMode; //SXFのモード
616
CDataSen m_SenHo1; //補助線1
617
CDataSen m_SenHo2; //補助線2
618
CDataTen m_Ten1; //矢印(点)1
619
CDataTen m_Ten2; //矢印(点)2
620
CDataTen m_TenHo1; //基準点1
621
CDataTen m_TenHo2; //基準点2
624
const char* className(){return "CDataSunpou";}
625
friend inline std::ostream& operator<<(std::ostream&, const CDataSunpou&);
626
friend inline std::istream& operator>>(std::istream&, CDataSunpou&);
627
void Serialize(std::ofstream& ofstr){
628
CData::Serialize(ofstr);
629
m_Sen .Serialize(ofstr);
630
m_Moji.Serialize(ofstr);
631
if( nOldVersionSave >= 420 ){ //Ver.4.20以降
632
ofstr << (WORD )m_bSxfMode;
633
m_SenHo1 .Serialize(ofstr);
634
m_SenHo2 .Serialize(ofstr);
635
m_Ten1 .Serialize(ofstr);
636
m_Ten2 .Serialize(ofstr);
637
m_TenHo1 .Serialize(ofstr);
638
m_TenHo2 .Serialize(ofstr);
641
void Serialize(std::ifstream& ifstr){
642
CData::Serialize(ifstr);
643
m_Sen .Serialize(ifstr);
644
m_Moji.Serialize(ifstr);
645
if( nOldVersionSave >= 420 ){ //Ver.4.20以降
647
m_SenHo1 .Serialize(ifstr);
648
m_SenHo2 .Serialize(ifstr);
649
m_Ten1 .Serialize(ifstr);
650
m_Ten2 .Serialize(ifstr);
651
m_TenHo1 .Serialize(ifstr);
652
m_TenHo2 .Serialize(ifstr);
656
typedef CDataSunpou* PCDataSunpou;
657
inline std::ostream& operator<< (std::ostream& ostr, const CDataSunpou& /*output*/)
662
inline std::istream& operator>> (std::istream& istr, CDataSunpou& /*input*/)
667
m_nPenWidth = m_nSunpouFlg; // (寸法値設定のフラグ)
669
---------------------------------------------
676
0x0100 少数桁以下 切捨(切捨、切上指定以外は四捨五入)
683
---------------------------------------------
687
class CDataSolid : public CData
690
DPoint m_start;//第1点X座標、Y座標
691
DPoint m_end;//第4点4座標、Y座標
692
DPoint m_DPoint2;//第2点X座標、Y座標
693
DPoint m_DPoint3;//第3点X座標、Y座標
694
DWORD m_Color;//塗潰し色のRGB値(任意色の場合のみ)
697
const char* className(){return "CDataSolid";}
698
friend inline std::ostream& operator<<(std::ostream&, const CDataSolid&);
699
friend inline std::istream& operator>>(std::istream&, CDataSolid&);
700
void Serialize(std::ofstream& ofstr)
705
CData::Serialize(ofstr);
706
ofstr << (double)m_start.x << (double)m_start.y
707
<< (double)m_end.x << (double)m_end.y
708
<< (double)m_DPoint2.x << (double)m_DPoint2.y
709
<< (double)m_DPoint3.x << (double)m_DPoint3.y;
710
if( 10 == m_nPenColor ){
711
ofstr << (DWORD)m_Color;//RGB
715
void Serialize(std::ifstream& ifstr){
716
CData::Serialize(ifstr);
717
ifstr >> m_start.x >> m_start.y
718
>> m_end.x >> m_end.y
719
>> m_DPoint2.x >> m_DPoint2.y
720
>> m_DPoint3.x >> m_DPoint3.y;
721
if( 10 == m_nPenColor ){
722
ifstr >> m_Color;//RGB
726
typedef CDataSolid* PCDataSolid;
727
inline std::ostream& operator<< (std::ostream& ostr, const CDataSolid& /*output*/)
732
inline std::istream& operator>> (std::istream& istr, CDataSolid& /*input*/)
738
class CDataBlock : public CData
741
DPoint m_DPKijunTen;//基準点X座標、Y座標
742
DOUBLE m_dBairitsuX;//X方向の倍率
743
DOUBLE m_dBairitsuY;//Y方向の倍率
744
DOUBLE m_radKaitenKaku;//回転角
745
DWORD m_n_Number;//ブロック定義データの通し番号
748
const char* className(){return "CDataBlock";}
749
friend inline std::ostream& operator<<(std::ostream&, const CDataBlock&);
750
friend inline std::istream& operator>>(std::istream&, CDataBlock&);
751
void Serialize(std::ofstream& ofstr)
756
CData::Serialize(ofstr);
757
ofstr <<(double)m_DPKijunTen.x <<(double)m_DPKijunTen.y
758
<<(double)m_dBairitsuX
759
<<(double)m_dBairitsuY
760
<<(double)m_radKaitenKaku
761
<</*(DWORD)m_pDataList->*/m_n_Number;//ポインタでなく通し番号を保存する
764
void Serialize(std::ifstream& ifstr){
765
CData::Serialize(ifstr);
766
ifstr >> m_DPKijunTen.x >> m_DPKijunTen.y
770
>>/*(DWORD)m_pDataList->*/m_n_Number;//ポインタでなく通し番号を保存する
773
typedef CDataBlock* PCDataBlock;
774
inline std::ostream& operator<< (std::ostream& ostr, const CDataBlock& /*output*/)
779
inline std::istream& operator>> (std::istream& istr, CDataBlock& /*input*/)
785
class CDataList : public CData
788
DWORD m_nNumber; //定義データの通し番号
789
DWORD m_bReffered; //参照されているかのフラグ
790
DWORD m_time; //定義された時間
791
string m_strName; //定義データの名前
793
//"@@SfigorgFlag@@"に続けて、複合図形種別フラグを付加
794
//1:部分図(数学座標系)、2: 部分図(測地座標系)、
796
vector<CData*> m_DataList; //定義データの実体のリスト
800
const char* className(){return "CDataList";}
801
friend inline std::ostream& operator<<(std::ostream&, const CDataList&);
802
friend inline std::istream& operator>>(std::istream&, CDataList&);
803
void Serialize(std::ofstream& ofstr){
804
CData::Serialize(ofstr);
805
ofstr <<(DWORD)m_nNumber
809
//"@@SfigorgFlag@@"に続けて、複合図形種別フラグを付加
810
//1:部分図(数学座標系)、2: 部分図(測地座標系)、
812
int len = m_strName.length();
823
ofstr.write(m_strName.c_str(), len);
825
//SKIP m_DataList.Serialize(ofstr);
827
void Serialize(std::ifstream& ifstr){
828
CData::Serialize(ifstr);
833
//"@@SfigorgFlag@@"に続けて、複合図形種別フラグを付加
834
//1:部分図(数学座標系)、2: 部分図(測地座標系)、
845
cout << "MojiData1:" << m_strName << endl;
854
cout << "MojiData1:" << m_strName << endl;
857
//SKIP m_DataList.Serialize(ifstr);
860
typedef CDataList* PCDataList;
861
inline std::ostream& operator<< (std::ostream& ostr, const CDataList& /*output*/)
866
inline std::istream& operator>> (std::istream& istr, CDataList& /*input*/)
881
typedef CDataType* PCDataType;
885
// DataTypeプロパティーを読んでから振り分けてDataSenなどで読み込む
890
vector<PCDataBlock> FBlockList;
891
vector<PCDataList> FDataList;
892
vector<CDataType> FDataType;
895
CDataList& GetBlockList(unsigned int i);
896
int getBlockListCount();
897
int GetDataListCount(unsigned int i);
898
void* GetData(unsigned int i, int j );
899
CDataType GetDataType(unsigned int i, int j );
901
CDataEnko& GetCDataEnko(int i, int j );
902
CDataMoji& GetCDataMoji(int i, int j );
903
CDataSen& GetCDataSen(int i, int j );
904
CDataSolid& GetCDataSolid(int i, int j );
905
CDataSunpou& GetCDataSunpou(int i, int j );
906
CDataTen& GetCDataTen(int i, int j );
907
CDataType GetCDataType(int i, int j );
908
CDataBlock& GetCDataBlock(int i, int j );
910
void AddBlockList(CDataList& CData);
911
void AddDataListSen(CDataSen& D);
912
void AddDataListEnko(CDataEnko& D);
913
void AddDataListTen(CDataTen& D);
914
void AddDataListMoji(CDataMoji& D);
915
void AddDataListSolid(CDataSolid& D);
916
void AddDataListSunpou(CDataSunpou& D);
917
void AddDataListBlock(CDataBlock& D);
924
typedef struct _NoList{
928
typedef NoList* PNoList;
934
vector<PNoList> FList;
941
NoList& GetItem(int i);
942
NoList& GetNoByItem(int i);
943
void AddItem(int No,string& str);
953
JWWDocument(string& iFName, string& oFName){
955
if(iFName.length()>0)
956
ifs = new ifstream(iFName.c_str(),ios::binary);
959
OutputFName = oFName;
960
if(oFName.length()>0)
961
ofs = new ofstream(oFName.c_str(),ios::binary|ios::trunc);
964
pList = new JWWList();
965
pBlockList = new JWWBlockList();
1001
DWORD SaveEnkoCount;
1003
DWORD SaveMojiCount;
1004
DWORD SaveSunpouCount;
1005
DWORD SaveSolidCount;
1006
DWORD SaveBlockCount;
1007
DWORD SaveDataListCount;
1009
vector<CDataSen> vSen;//
1010
vector<CDataEnko> vEnko;//
1011
vector<CDataTen> vTen;//
1012
vector<CDataMoji> vMoji;//
1013
vector<CDataSolid> vSolid;//
1014
vector<CDataBlock> vBlock;//
1015
vector<CDataSunpou> vSunpou;//
1017
JWWBlockList* pBlockList;//ブロックデータ定義部のリスト
1018
vector<CData*> m_DataList; //図形データのリスト
1019
vector<CDataList*> m_DataListList; //ブロックデータ定義部のリスト
1020
void WriteString(string s);
1021
string ReadData(int n);
1022
string ReadString();
1027
BOOL SaveBich16(DWORD id);
1028
BOOL SaveSen(CDataSen& DSen);
1029
BOOL SaveEnko(CDataEnko& DEnko);
1030
BOOL SaveTen(CDataTen& DTen);
1031
BOOL SaveMoji(CDataMoji& DMoji);
1032
BOOL SaveSunpou(CDataSunpou& DSunpou);
1033
BOOL SaveSolid(CDataSolid& DSolid);
1034
BOOL SaveBlock(CDataBlock& DBlock);
1035
BOOL SaveDataList(CDataList& DList);