3
#define LINEBUF_SIZE 1024
6
void CDataSen::Serialize(std::ofstream& ofstr)
8
CData::Serialize(ofstr);
9
ofstr << (double)m_start.x << (double)m_start.y
10
<< (double)m_end.x << (double)m_end.y;
13
void CDataEnko::Serialize(std::ofstream& ofstr)
15
CData::Serialize(ofstr);
16
ofstr << (double)m_start.x << (double)m_start.y
18
<< (double)m_radKaishiKaku
19
<< (double)m_radEnkoKaku
20
<< (double)m_radKatamukiKaku
21
<< (double)m_dHenpeiRitsu
22
<< (DWORD )m_bZenEnFlg;
25
void CDataTen::Serialize(std::ofstream& ofstr)
28
if( nOldVersionSave >= 252 ){ //Ver.2.52以降
29
if( 0 != m_nCode ){ m_nPenStyle = 100; }
32
CData::Serialize(ofstr);
34
ofstr << (double)m_start.x << (double)m_start.y;
35
ofstr << (DWORD)m_bKariten;
36
if( 100 == m_nPenStyle ){
37
ofstr << (DWORD )m_nCode;
38
ofstr << (double)m_radKaitenKaku;
39
ofstr << (double)m_dBairitsu;
43
void CDataMoji::Serialize(std::ofstream& ofstr)
45
////////////////////////////////////////////
46
//SKIP m_nPenWidth = m_nSunpouFlg; // (寸法値設定のフラグ)ヘッダーメンバー
47
CData::Serialize(ofstr);
48
m_nPenWidth = 1; //文字枠幅を1
49
//SKIP if( m_sMojiFlg & 0x0001 ){ m_nMojiShu += 10000; } //斜体文字
50
//SKIP if( m_sMojiFlg & 0x0010 ){ m_nMojiShu += 20000; } //ボールド
52
ofstr << (double)m_start.x << (double)m_start.y
53
<< (double)m_end.x << (double)m_end.y
55
<< (double)m_dSizeX << (double)m_dSizeY
57
<< (double)m_degKakudo;
59
int len = m_strFontName.length();
70
ofstr.write(m_strFontName.c_str(),len);
72
len = m_string.length();
83
ofstr.write(m_string.c_str(),len);
85
m_nMojiShu = (m_nMojiShu % 10000);
88
void CDataSolid::Serialize(std::ofstream& ofstr)
90
CData::Serialize(ofstr);
91
ofstr << (double)m_start.x << (double)m_start.y
92
<< (double)m_end.x << (double)m_end.y
93
<< (double)m_DPoint2.x << (double)m_DPoint2.y
94
<< (double)m_DPoint3.x << (double)m_DPoint3.y;
95
if( 10 == m_nPenColor ){
96
ofstr << (DWORD)m_Color;//RGB
100
void CDataBlock::Serialize(std::ofstream& ofstr)
102
CData::Serialize(ofstr);
103
ofstr <<(double)m_DPKijunTen.x <<(double)m_DPKijunTen.y
104
<<(double)m_dBairitsuX
105
<<(double)m_dBairitsuY
106
<<(double)m_radKaitenKaku
107
<</*(DWORD)m_pDataList->*/m_n_Number;//ポインタでなく通し番号を保存する
112
void JWWDocument::WriteString(string s){
113
int len = s.length();
117
}else if( len >= 0xFF ){
123
ofs->write(s.c_str(), len);
126
string JWWDocument::ReadData(int n)
128
//avoid buffer overflow
131
std::cerr<<"JWWDocument::ReadData("<<n<<"): requested data length is larger than "<<LINEBUF_SIZE<<std::endl;
136
ifs->read(&(Result[0]), n);
137
// Result += '\0'; // may not be necessary, to make sure the string ends with '\0';
140
// char cbuf[LINEBUF_SIZE];
141
// cbuf[0] = (char)NULL;
143
// ifs->read(cbuf, n);
144
// cbuf[n] = (char)NULL;
145
// string Result(cbuf, n);
149
string JWWDocument::ReadString()
157
else if( bt != 0xFF )
158
Result = ReadData(bt);
162
Result = ReadData(wd);
167
//ヘッダー部読みだし(JWW形式とバージョンチェック)
168
BOOL JWWDocument::ReadHeader()
176
// BOOL Result = false;
183
if(Header.head =="JwwData.")
187
Header.JW_DATA_VERSION = dw;
188
if(Header.JW_DATA_VERSION == 230 || Header.JW_DATA_VERSION >= 300)
191
Header.m_strMemo = ReadString();
202
Header.m_nZumen = dw;
205
Header.m_nWriteGLay = dw;
206
for( i = 0; i < 16; i++ ){
208
Header.GLay[i].m_anGLay = dw;
210
Header.GLay[i].m_anWriteLay = dw;
212
Header.GLay[i].m_adScale = db;
214
Header.GLay[i].m_anGLayProtect = dw;
215
for(int nLay=0;nLay<16;nLay++){
217
Header.GLay[i].m_nLay[nLay].m_aanLay = dw;
219
Header.GLay[i].m_nLay[nLay].m_aanLayProtect = dw;
223
for( i = 0; i < 14; i++ )
230
Header.m_lnSunpou1 = dw;
232
Header.m_lnSunpou2 = dw;
234
Header.m_lnSunpou3 = dw;
236
Header.m_lnSunpou4 = dw;
238
Header.m_lnSunpou5 = dw;
243
//「線幅を1/100mm単位とする」が設定されているときは「-101」
245
Header.m_nMaxDrawWid = dw;
248
Header.m_DPPrtGenten.x = db;
251
Header.m_DPPrtGenten.y = db;
254
Header.m_dPrtBairitsu = db;
255
//プリンタ90°回転出力、プリンタ出力基準点位置
257
Header.m_nPrt90Kaiten = dw;
260
Header.m_nMemoriMode = dw;
263
Header.m_dMemoriHyoujiMin = db;
266
Header.m_dMemoriX = db;
269
Header.m_dMemoriY = db;
272
Header.m_DpMemoriKijunTen.x = db;
275
Header.m_DpMemoriKijunTen.y = db;
277
for( i=0; i < 16; i++)
278
for( int j = 0; j < 16; j++ )
279
Header.m_aStrLayName[i][j] = ReadString();
281
for( i=0; i < 16; i++ )
282
Header.m_aStrGLayName[i] = ReadString();
285
Header.m_dKageLevel = db;
288
Header.m_dKageIdo = db;
291
Header.m_nKage9_15Flg = dw;
294
Header.m_dKabeKageLevel = db;
296
if(Header.JW_DATA_VERSION >= 300)
300
Header.m_dTenkuuZuLevel = db;
303
Header.m_dTenkuuZuEnkoR = db;
305
//2.5Dの計算単位(0以外はmm単位で計算)
307
Header.m_nMMTani3D = dw;
309
//保存時の画面倍率(読込むと前画面倍率になる)
311
Header.m_dBairitsu = db;
314
Header.m_DPGenten.x = db;
317
Header.m_DPGenten.y = db;
321
Header.m_dHanniBairitsu = db;
324
Header.m_DPHanniGenten.x = db;
327
Header.m_DPHanniGenten.y = db;
329
//マークジャンプ倍率、基準点(X,Y)およびレイヤグループ
330
if(Header.JW_DATA_VERSION >= 300)
333
for(int n=1; n<=8; n++){
335
Header.m_dZoom[n].m_dZoomJumpBairitsu = db;
337
Header.m_dZoom[n].m_DPZoomJumpGenten.x = db;
339
Header.m_dZoom[n].m_DPZoomJumpGenten.y = db;
341
Header.m_dZoom[n].m_nZoomJumpGLay = dw;
345
for( i=1; i <= 4; i++ )
348
Header.m_dZoom[i].m_dZoomJumpBairitsu = db;
350
Header.m_dZoom[i].m_DPZoomJumpGenten.x = db;
352
Header.m_dZoom[i].m_DPZoomJumpGenten.y = db;
356
if( Header.JW_DATA_VERSION >= 300 ){ //Ver.3.00以降
369
//(Ver.4.04以前はダミー)文字列範囲を背景色で描画するときの範囲増寸法
371
Header.m_dMojiBG = db;
373
//十位:文字(寸法図形、ブロック図形)を最後に描画
374
//一位:1 :輪郭・範囲を背景色で描画しない
378
Header.m_nMojiBG = dw;
381
for( i=0; i <= 9; i++ ){
383
Header.m_adFukusenSuuchi[i] = db;
387
Header.m_dRyoygawaFukusenTomeDe = db;
389
for( i=0; i <= 9; i++ ){
391
Header.m_Pen[i].m_m_aPenColor = dw;
393
Header.m_Pen[i].m_anPenWidth = dw;
395
//色番号ごとのプリンタ出力色、線幅、実点半径
396
for( i=0; i <= 9; i++ ){
398
Header.m_PrtPen[i].m_aPrtpenColor = dw;
400
Header.m_PrtPen[i].m_anPrtPenWidth = dw;
402
Header.m_PrtPen[i].m_adPrtTenHankei = db;
404
//線種番号2から9までのパターン、1ユニットのドット数、ピッチ、プリンタ出力ピッチ
405
for( i=2; i <= 9; i++ ){
407
Header.m_alLType1[i].m_alLtype = dw;
409
Header.m_alLType1[i].m_anTokushusSenUnitDot = dw;
411
Header.m_alLType1[i].m_anTokushuSenPich = dw;
413
Header.m_alLType1[i].m_anPrtTokushuSenPich = dw;
415
//ランダム線1から5までのパターン、画面表示振幅・ピッチ、プリンタ出力振幅・ピッチ
416
for( i=11; i <= 15; i++ ){
418
Header.m_alLType2[i].m_alLtype = dw;
420
Header.m_alLType2[i].m_anRandSenWide = dw;
422
Header.m_alLType2[i].m_anTokushuSenPich = dw;
424
Header.m_alLType2[i].m_anPrtRandSenWide = dw;
426
Header.m_alLType2[i].m_anPrtTokushuSenPich = dw;
428
//倍長線種番号6から9までのパターン、1ユニットのドット数、ピッチ、プリンタ出力ピッチ
429
for( i=16; i <= 19; i++ ){
431
Header.m_alLType3[i].m_alLtype = dw;
433
Header.m_alLType3[i].m_anTokushusSenUnitDot = dw;
435
Header.m_alLType3[i].m_anTokushuSenPich = dw;
437
Header.m_alLType3[i].m_anPrtTokushuSenPich = dw;
441
Header.m_nDrawGamenTen = dw;
444
Header.m_nDrawPrtTen = dw;
445
//BitMap・ソリッドを最初に描画する
447
Header.m_nBitMapFirstDraw = dw;
450
Header.m_nGyakuDraw = dw;
453
Header.m_nGyakuSearch = dw;
456
Header.m_nColorPrint = dw;
459
Header.m_nLayJunPrint = dw;
462
Header.m_nColJunPrint = dw;
463
//レイヤグループまたはレイヤごとのプリンタ連続出力指定
465
Header.m_nPrtRenzoku = dw;
466
//プリンタ共通レイヤ(表示のみレイヤ)のグレー出力指定
468
Header.m_nPrtKyoutuuGray = dw;
469
//プリンタ出力時に表示のみレイヤは出力しない
471
Header.m_nPrtDispOnlyNonDraw = dw;
474
Header.m_lnDrawTime = dw;
475
//2.5Dの始点位置が設定されている時のフラグ(Ver.2.23以降)
477
Header.nEyeInit = dw;
478
//2.5Dの透視図・鳥瞰図・アイソメ図の視点水平角(Ver.2.23以降)
480
Header.m_dEye_H_Ichi_1 = dw;
483
Header.m_dEye_H_Ichi_2 = dw;
486
Header.m_dEye_H_Ichi_3 = dw;
487
//2.5Dの透視図の視点高さ・視点離れ(Ver.2.23以降)
489
Header.m_dEye_Z_Ichi_1 = db;
492
Header.m_dEye_Y_Ichi_1 = db;
493
//2.5Dの鳥瞰図の視点高さ・視点離れ(Ver.2.23以降)
495
Header.m_dEye_Z_Ichi_2 = db;
498
Header.m_dEye_Y_Ichi_2 = db;
499
//2.5Dのアイソメ図の視点垂直角(Ver.2.23以降)
501
Header.m_dEye_V_Ichi_3 = db;
502
//線の長さ指定の最終値(Ver.2.25以降)
504
Header.m_dSenNagasaSunpou = db;
505
//矩形寸法横寸法・縦寸法指定の最終値(Ver.2.25以降)
507
Header.m_dBoxSunpouX = db;
510
Header.m_dBoxSunpouY = db;
511
//円の半径指定の最終値(Ver.2.25以降)
513
Header.m_dEnHankeySunpou = db;
514
//ソリッドを任意色で書くフラグ、ソリッドの任意色の既定値(Ver.2.30以降)
516
Header.m_nSolidNinniColor = dw;
519
Header.m_SolidColor = dw;
520
//SXF対応拡張線色定義(Ver.4.20以降)
521
if(Header.JW_DATA_VERSION >= 420){
523
for( int n=0; n <= 256; n++ ){ ////// 画面表示色
524
n1 = n + SXCOL_EXT; //色番号のオフセット = +100
526
Header.m_SxfCol.m_aPenColor[n1] = dw;
528
Header.m_SxfCol.m_anPenWidth[n1] = dw;
530
for( int n=0; n <= 256; n++ ){ ////// プリンタ出力色
531
Header.m_SxfCol.m_astrUDColorName[n] = ReadString();
532
n1 = n + SXCOL_EXT; //色番号のオフセット = +100
534
Header.m_SxfCol.m_aPrtPenColor[n1] = dw;
536
Header.m_SxfCol.m_anPrtPenWidth[n1] = dw;
538
Header.m_SxfCol.m_adPrtTenHankei[n1] = db;
541
//SXF対応拡張線種定義(Ver.4.20以降)
542
if(Header.JW_DATA_VERSION >= 420){
544
for( int n=0; n<=32; n++){ ////// 線種パターン
545
n1 = n + SXLTP_EXT; //線種番号のオフセット = +30
547
Header.m_SxfLtp.m_alLType[n1] = dw;
549
Header.m_SxfLtp.m_anTokushuSenUintDot[n1] = dw;
551
Header.m_SxfLtp.m_anTokushuSenPich[n1] = dw;
553
Header.m_SxfLtp.m_anPrtTokushuSenPich[n1] = dw;
555
for( int n=0; n<=32; n++){ ////// 線種パラメータ
556
Header.m_SxfLtp.m_astrUDLTypeName[n] = ReadString();
558
Header.m_SxfLtp.m_anUDLTypeSegment[n] = dw;
559
for( int j=1; j<=10; j++){
561
Header.m_SxfLtp.m_aadUDLTypePitch[n][j] = db;
565
//文字種1から10までの文字幅、高さ、間隔、色番号
568
Header.m_Moji[i].m_adMojiX = db;
570
Header.m_Moji[i].m_adMojiY = db;
572
Header.m_Moji[i].m_adMojiD = db;
574
Header.m_Moji[i].m_anMojiCol = dw;
578
Header.m_dMojiSizeX = db;
581
Header.m_dMojiSizeY = db;
584
Header.m_dMojiKankaku = db;
587
Header.m_nMojiColor = dw;
590
Header.m_nMojiShu = dw;
593
Header.m_dMojiSeiriGyouKan = db;
596
Header.m_dMojiSeiriSuu = db;
599
Header.m_nMojiKijunZureOn = dw;
602
Header.m_adMojiKijunZureX[0] = db;
605
Header.m_adMojiKijunZureX[1] = db;
608
Header.m_adMojiKijunZureX[2] = db;
611
Header.m_adMojiKijunZureY[0] = db;
614
Header.m_adMojiKijunZureY[1] = db;
617
Header.m_adMojiKijunZureY[2] = db;
627
BOOL JWWDocument::WriteHeader()
635
ofs->write("JwwData.",8);
637
dw=Header.JW_DATA_VERSION;
640
WriteString(Header.m_strMemo);
645
dw=Header.m_nWriteGLay;
647
for(int i = 0; i < 16; i++ ){
648
dw = Header.GLay[i].m_anGLay;
650
dw = Header.GLay[i].m_anWriteLay;
652
db = Header.GLay[i].m_adScale;
654
dw = Header.GLay[i].m_anGLayProtect;
656
for(int nLay=0;nLay<16;nLay++){
657
dw = Header.GLay[i].m_nLay[nLay].m_aanLay;
659
dw = Header.GLay[i].m_nLay[nLay].m_aanLayProtect;
664
for(int i = 0; i < 14; i++ )
670
dw = Header.m_lnSunpou1;
672
dw = Header.m_lnSunpou2;
674
dw = Header.m_lnSunpou3;
676
dw = Header.m_lnSunpou4;
678
dw = Header.m_lnSunpou5;
684
dw = Header.m_nMaxDrawWid;
687
db = Header.m_DPPrtGenten.x;
690
db = Header.m_DPPrtGenten.y;
693
db = Header.m_dPrtBairitsu;
695
//プリンタ90°回転出力、プリンタ出力基準点位置
696
dw = Header.m_nPrt90Kaiten;
699
dw = Header.m_nMemoriMode;
702
db = Header.m_dMemoriHyoujiMin;
705
db = Header.m_dMemoriX;
708
db = Header.m_dMemoriY;
711
db = Header.m_DpMemoriKijunTen.x;
714
db = Header.m_DpMemoriKijunTen.y;
717
for(int i = 0; i < 16; i++ )
718
for( int j = 0; j < 16; j++ )
719
WriteString(Header.m_aStrLayName[i][j]);
721
for(int i = 0; i < 16; i++ )
722
WriteString(Header.m_aStrGLayName[i]);
724
db = Header.m_dKageLevel;
727
db = Header.m_dKageIdo;
730
dw = Header.m_nKage9_15Flg;
733
db = Header.m_dKabeKageLevel;
735
//天空図の条件(Ver.3.00以降) 測定面高さ
736
if(Header.JW_DATA_VERSION >= 300)
738
db = Header.m_dTenkuuZuLevel;
741
db = Header.m_dTenkuuZuEnkoR;
745
//2.5Dの計算単位(0以外はmm単位で計算)
746
dw = Header.m_nMMTani3D;
748
//保存時の画面倍率(読込むと前画面倍率になる)
749
db = Header.m_dBairitsu;
752
db = Header.m_DPGenten.x;
755
db = Header.m_DPGenten.y;
758
db = Header.m_dHanniBairitsu;
761
db = Header.m_DPHanniGenten.x;
764
db = Header.m_DPHanniGenten.y;
766
//マークジャンプ倍率、基準点(X,Y)およびレイヤグループ
767
if( Header.JW_DATA_VERSION >= 300 ){ //Ver.3.00以降
768
for( int i=1; i<=8; i++ ){
769
db = Header.m_dZoom[i].m_dZoomJumpBairitsu;
771
db = Header.m_dZoom[i].m_DPZoomJumpGenten.x;
773
db = Header.m_dZoom[i].m_DPZoomJumpGenten.y;
775
dw = Header.m_dZoom[i].m_nZoomJumpGLay;
779
for( int i=1; i<=4; i++){
780
db = Header.m_dZoom[i].m_dZoomJumpBairitsu;
782
db = Header.m_dZoom[i].m_DPZoomJumpGenten.x;
784
db = Header.m_dZoom[i].m_DPZoomJumpGenten.y;
788
//文字の描画状態(Ver.4.05以降)
789
if( Header.JW_DATA_VERSION >= 300 ){ //Ver.3.00以降
790
db = Header.dDm11;//ダミー
792
db = Header.dDm12;//ダミー
794
db = Header.dDm13;//ダミー
796
dw = Header.lnDm1;//ダミー
798
db = Header.dDm21;//ダミー
800
db = Header.dDm22;//ダミー
802
db = Header.m_dMojiBG;//(Ver.4.04以前はダミー)
803
*ofs << db; //文字列範囲を背景色で描画するときの範囲増寸法
804
dw = Header.m_nMojiBG;
808
for(int i = 0; i <= 9; i++ )
810
db = Header.m_adFukusenSuuchi[i];
814
db = Header.m_dRyoygawaFukusenTomeDe;
817
for(int i = 0; i <= 9; i++ )
819
dw = Header.m_Pen[i].m_m_aPenColor;
821
dw = Header.m_Pen[i].m_anPenWidth;
824
//色番号ごとのプリンタ出力色、線幅、実点半径
825
for(int i = 0; i <= 9; i++ )
827
dw = Header.m_PrtPen[i].m_aPrtpenColor;
829
dw = Header.m_PrtPen[i].m_anPrtPenWidth;
831
db = Header.m_PrtPen[i].m_adPrtTenHankei;
834
//線種番号2から9までのパターン、1ユニットのドット数、ピッチ、プリンタ出力ピッチ
835
for(int i = 2; i <= 9; i++ )
837
dw = Header.m_alLType1[i].m_alLtype;
839
dw = Header.m_alLType1[i].m_anTokushusSenUnitDot;
841
dw = Header.m_alLType1[i].m_anTokushuSenPich;
843
dw = Header.m_alLType1[i].m_anPrtTokushuSenPich;
846
//ランダム線1から5までのパターン、画面表示振幅・ピッチ、プリンタ出力振幅・ピッチ
847
for(int i = 11; i <= 15; i++ )
849
dw = Header.m_alLType2[i].m_alLtype;
851
dw = Header.m_alLType2[i].m_anRandSenWide;
853
dw = Header.m_alLType2[i].m_anTokushuSenPich;
855
dw = Header.m_alLType2[i].m_anPrtRandSenWide;
857
dw = Header.m_alLType2[i].m_anPrtTokushuSenPich;
860
//倍長線種番号6から9までのパターン、1ユニットのドット数、ピッチ、プリンタ出力ピッチ
861
for(int i = 16; i <= 19; i++ )
863
dw = Header.m_alLType3[i].m_alLtype;
865
dw = Header.m_alLType3[i].m_anTokushusSenUnitDot;
867
dw = Header.m_alLType3[i].m_anTokushuSenPich;
869
dw = Header.m_alLType3[i].m_anPrtTokushuSenPich;
873
dw = Header.m_nDrawGamenTen;
876
dw = Header.m_nDrawPrtTen;
878
//BitMap・ソリッドを最初に描画する
879
dw = Header.m_nBitMapFirstDraw;
882
dw = Header.m_nGyakuDraw;
885
dw = Header.m_nGyakuSearch;
888
dw = Header.m_nColorPrint;
891
dw = Header.m_nLayJunPrint;
894
dw = Header.m_nColJunPrint;
896
//レイヤグループまたはレイヤごとのプリンタ連続出力指定
897
dw = Header.m_nPrtRenzoku;
899
//プリンタ共通レイヤ(表示のみレイヤ)のグレー出力指定
900
dw = Header.m_nPrtKyoutuuGray;
902
//プリンタ出力時に表示のみレイヤは出力しない
903
dw = Header.m_nPrtDispOnlyNonDraw;
906
dw = Header.m_lnDrawTime;
908
//2.5Dの始点位置が設定されている時のフラグ(Ver.2.23以降)
909
dw = Header.nEyeInit;
911
//2.5Dの透視図・鳥瞰図・アイソメ図の視点水平角(Ver.2.23以降)
912
dw = Header.m_dEye_H_Ichi_1;
915
dw = Header.m_dEye_H_Ichi_2;
918
dw = Header.m_dEye_H_Ichi_3;
920
//2.5Dの透視図の視点高さ・視点離れ(Ver.2.23以降)
921
db = Header.m_dEye_Z_Ichi_1;
924
db = Header.m_dEye_Y_Ichi_1;
926
//2.5Dの鳥瞰図の視点高さ・視点離れ(Ver.2.23以降)
927
db = Header.m_dEye_Z_Ichi_2;
930
db = Header.m_dEye_Y_Ichi_2;
932
//2.5Dのアイソメ図の視点垂直角(Ver.2.23以降)
933
db = Header.m_dEye_V_Ichi_3;
935
//線の長さ指定の最終値(Ver.2.25以降)
936
db = Header.m_dSenNagasaSunpou;
938
//矩形寸法横寸法・縦寸法指定の最終値(Ver.2.25以降)
939
db = Header.m_dBoxSunpouX;
942
db = Header.m_dBoxSunpouY;
944
//円の半径指定の最終値(Ver.2.25以降)
945
db = Header.m_dEnHankeySunpou;
947
//ソリッドを任意色で書くフラグ、ソリッドの任意色の既定値(Ver.2.30以降)
948
dw = Header.m_nSolidNinniColor;
951
dw = Header.m_SolidColor;
953
//SXF対応拡張線色定義(Ver.4.20以降)
954
if( Header.JW_DATA_VERSION >= 420 ){
956
for( int n=0; n<=256; n++){ // 画面表示色
957
n1 = n + SXCOL_EXT; //色番号のオフセット = +100
958
dw = Header.m_SxfCol.m_aPenColor[n1];
960
dw = Header.m_SxfCol.m_anPenWidth[n1];
963
for( int n=0; n<=256; n++){ // プリンタ出力色
964
WriteString(Header.m_SxfCol.m_astrUDColorName[n]);
965
n1 = n + SXCOL_EXT; //色番号のオフセット = +100
966
dw = Header.m_SxfCol.m_aPrtPenColor[n1];
968
dw = Header.m_SxfCol.m_anPrtPenWidth[n1];
970
db = Header.m_SxfCol.m_adPrtTenHankei[n1];
974
//SXF対応拡張線種定義(Ver.4.20以降)
975
if( Header.JW_DATA_VERSION >= 420 ){
977
for( int n=0; n<=32; n++){ // 線種パターン
978
n1 = n + SXLTP_EXT; //線種番号のオフセット = +30
979
dw = Header.m_SxfLtp.m_alLType[n1];
981
dw = Header.m_SxfLtp.m_anTokushuSenUintDot[n1];
983
dw = Header.m_SxfLtp.m_anTokushuSenPich[n1];
985
dw = Header.m_SxfLtp.m_anPrtTokushuSenPich[n1];
988
for( int n=0; n<=32; n++){ // 線種パラメータ
989
WriteString(Header.m_SxfLtp.m_astrUDLTypeName[n]);
990
dw = Header.m_SxfLtp.m_anUDLTypeSegment[n];
992
for(int j=1; j<=10; j++){
993
db = Header.m_SxfLtp.m_aadUDLTypePitch[n][j];
998
//文字種1から10までの文字幅、高さ、間隔、色番号
999
for(int i = 1; i <= 10; i++ )
1001
db = Header.m_Moji[i].m_adMojiX;
1003
db = Header.m_Moji[i].m_adMojiY;
1005
db = Header.m_Moji[i].m_adMojiD;
1007
dw = Header.m_Moji[i].m_anMojiCol;
1010
//書込み文字の文字幅、高さ、間隔、色番号、文字番号
1011
db = Header.m_dMojiSizeX;
1014
db = Header.m_dMojiSizeY;
1017
db = Header.m_dMojiKankaku;
1020
dw = Header.m_nMojiColor;
1023
dw = Header.m_nMojiShu;
1026
db = Header.m_dMojiSeiriGyouKan;
1029
db = Header.m_dMojiSeiriSuu;
1032
dw = Header.m_nMojiKijunZureOn;
1034
//文字基準点の横方向のずれ位置左、中、右
1035
db = Header.m_adMojiKijunZureX[0];
1038
db = Header.m_adMojiKijunZureX[1];
1041
db = Header.m_adMojiKijunZureX[2];
1043
//文字基準点の縦方向のずれ位置下、中、上
1044
db = Header.m_adMojiKijunZureY[0];
1047
db = Header.m_adMojiKijunZureY[1];
1050
db = Header.m_adMojiKijunZureY[2];
1057
BOOL JWWDocument::Read()
1077
CDataSunpou DSunpou;
1095
//バージョン毎にデータ読み書きを変える
1096
DSen.SetVersion(Header.JW_DATA_VERSION);
1097
DEnko.SetVersion(Header.JW_DATA_VERSION);
1098
DTen.SetVersion(Header.JW_DATA_VERSION);
1099
DMoji.SetVersion(Header.JW_DATA_VERSION);
1100
DSolid.SetVersion(Header.JW_DATA_VERSION);
1101
DSunpou.SetVersion(Header.JW_DATA_VERSION);
1102
DBlock.SetVersion(Header.JW_DATA_VERSION);
1114
while( !ifs->eof() )
1119
continue;//goto exitloop;
1127
pList->AddItem(i,s);
1135
j = dw & 0x7FFFFFFF;
1141
j = dw & 0x7FFFFFFF;
1152
s = pList->GetNoByItem(j).CDataString;
1156
if( ListCount == ListLength )
1158
if(s == "CDataList")
1162
DList.Serialize(*ifs);
1166
pBlockList->AddBlockList(DList);
1167
ListLength = DList.Count;
1169
if( s == "CDataSen" )
1171
DSen.Serialize(*ifs);
1177
pBlockList->AddDataListSen(DSen);
1181
vSen.push_back(DSen);
1185
if( s == "CDataEnko")
1187
DEnko.Serialize(*ifs);
1193
pBlockList->AddDataListEnko(DEnko);
1198
vEnko.push_back(DEnko);
1202
if( s == "CDataTen" )
1204
DTen.Serialize(*ifs);
1210
pBlockList->AddDataListTen(DTen);
1214
vTen.push_back(DTen);
1218
if( s == "CDataMoji" )
1220
DMoji.Serialize(*ifs);
1226
pBlockList->AddDataListMoji(DMoji);
1230
vMoji.push_back(DMoji);
1234
if( s == "CDataSolid" )
1236
DSolid.Serialize(*ifs);
1242
pBlockList->AddDataListSolid(DSolid);
1246
vSolid.push_back(DSolid);
1250
if( s == "CDataBlock" )
1252
DBlock.Serialize(*ifs);
1258
pBlockList->AddDataListBlock(DBlock);
1262
vBlock.push_back(DBlock);
1266
if( s == "CDataSunpou" )
1268
DSunpou.Serialize(*ifs);
1274
pBlockList->AddDataListSunpou(DSunpou);
1278
vSunpou.push_back(DSunpou);
1290
BOOL JWWDocument::SaveBich16(DWORD id)
1292
DWORD i=((id*2) | 0x0000ffff) >> 16;
1299
BOOL JWWDocument::SaveSen(CDataSen& DSen)
1304
if( SaveSenCount == 0 )
1314
ofs->write(s.c_str(), wd);
1320
DSen.Serialize(*ofs);
1327
BOOL JWWDocument::SaveEnko(CDataEnko& DEnko)
1332
if( SaveEnkoCount == 0 )
1342
ofs->write(s.c_str(), wd);
1345
if( SaveBich16(PEnko) )
1353
dw=PEnko | 0x80000000;
1358
DEnko.Serialize(*ofs);
1365
BOOL JWWDocument::SaveTen(CDataTen& DTen)
1371
if( SaveTenCount == 0 )
1381
ofs->write(s.c_str(), wd);
1384
if( SaveBich16(PTen) )
1393
dw=PTen | 0x80000000;
1397
DTen.Serialize(*ofs);
1405
BOOL JWWDocument::SaveMoji(CDataMoji& DMoji)
1411
if( SaveMojiCount == 0 )
1421
ofs->write(s.c_str(), wd);
1424
if( SaveBich16(PMoji) )
1432
dw=PMoji | 0x80000000;
1437
DMoji.Serialize(*ofs);
1444
BOOL JWWDocument::SaveSunpou(CDataSunpou& DSunpou)
1450
if( SaveSunpouCount == 0 )
1460
ofs->write(s.c_str(), wd);
1463
if( SaveBich16(PSunpou) )
1465
wd=PSunpou | 0x8000;
1471
dw=PSunpou | 0x80000000;
1476
DSunpou.Serialize(*ofs);
1483
BOOL JWWDocument::SaveSolid(CDataSolid& DSolid)
1489
if( SaveSolidCount == 0 )
1499
ofs->write(s.c_str(), wd);
1502
if( SaveBich16(PSolid) )
1510
dw=PSolid | 0x80000000;
1515
DSolid.Serialize(*ofs);
1522
BOOL JWWDocument::SaveBlock(CDataBlock& DBlock)
1528
if( SaveBlockCount == 0 )
1538
ofs->write(s.c_str(), wd);
1541
if( SaveBich16(PBlock) )
1549
dw=PBlock | 0x80000000;
1554
DBlock.Serialize(*ofs);
1561
BOOL JWWDocument::SaveDataList(CDataList& DList)
1567
if( SaveDataListCount == 0 )
1577
ofs->write(s.c_str(), wd);
1580
if( SaveBich16(PList) )
1588
dw=PList | 0x80000000;
1593
DList.Serialize(*ofs);
1594
SaveDataListCount++;
1600
BOOL JWWDocument::Save()
1615
SaveDataListCount=0;
1619
dw = vSen.size() + vEnko.size() + vTen.size() + vMoji.size() + vSunpou.size() + vSolid.size() + vBlock.size();// + 7;
1620
if( SaveBich16(dw) )
1621
ofs->write((char*)&dw,2);
1631
for( i=0 ; i < vSen.size(); i++ )
1633
for( i=0 ; i < vEnko.size(); i++ )
1635
for( i=0 ; i < vTen.size(); i++ )
1637
for( i=0 ; i < vMoji.size(); i++ )
1639
for( i=0 ; i < vSunpou.size(); i++ )
1640
SaveSunpou(vSunpou[i]);
1641
for( i=0 ; i < vSolid.size(); i++ )
1642
SaveSolid(vSolid[i]);
1643
for( i=0 ; i < vBlock.size(); i++)
1644
SaveBlock(vBlock[i]);
1645
dw=pBlockList->getBlockListCount();
1647
for( i=0; i < dw; i++ )
1649
SaveDataList(pBlockList->GetBlockList(i));
1650
int Count=pBlockList->GetDataListCount(i);
1651
for( j=0 ; j < Count; j++)
1653
switch(pBlockList->GetDataType(i,j))
1656
SaveSen(pBlockList->GetCDataSen(i,j));
1659
SaveEnko(pBlockList->GetCDataEnko(i,j));
1662
SaveTen(pBlockList->GetCDataTen(i,j));
1665
SaveMoji(pBlockList->GetCDataMoji(i,j));
1668
SaveSolid(pBlockList->GetCDataSolid(i,j));
1671
SaveSunpou(pBlockList->GetCDataSunpou(i,j));
1674
SaveBlock(pBlockList->GetCDataBlock(i,j));
1682
void JWWList::AddItem(int No, string& str)
1684
PNoList nList = new NoList;
1685
nList->CDataString = str;
1687
FList.push_back(nList);
1699
for( unsigned int i=0; i < FList.size(); i++)
1705
int JWWList::GetCount()
1707
return FList.size();
1710
NoList& JWWList::GetItem(int i)
1716
NoList& JWWList::GetNoByItem(int No)
1718
// vector<PNoList>::iterator itr = vect.begin();
1719
// vector<PNoList>::iterator itrEnd = vect.end();
1720
for( unsigned int i=0; i < FList.size(); i++)
1722
if(FList[i]->No == No){
1729
JWWBlockList::JWWBlockList()
1733
JWWBlockList::~JWWBlockList()
1735
int sz = FBlockList.size();
1736
for(int i=0; i < sz; i++)
1739
delete FBlockList[i];
1745
sz = FDataList.size();
1746
for(int i=0; i < sz; i++)
1749
delete FDataList[i];
1757
CDataList& JWWBlockList::GetBlockList(unsigned int i)
1759
for(unsigned int k=0; k < FBlockList.size(); k++)
1760
if(i == FBlockList[k]->m_n_Number)
1761
return *(PCDataList)FBlockList[k];
1762
return *PCDataList();
1765
int JWWBlockList::getBlockListCount()
1767
return FBlockList.size();
1770
CDataEnko& JWWBlockList::GetCDataEnko(int i, int j)
1772
if( GetCDataType(i,j) == Enko )
1773
return *(PCDataEnko)GetData(i,j);
1774
return *PCDataEnko();
1777
CDataMoji& JWWBlockList::GetCDataMoji(int i, int j)
1779
if( GetCDataType(i,j) == Moji )
1780
return *(PCDataMoji)GetData(i,j);
1781
return *PCDataMoji();
1784
CDataSen& JWWBlockList::GetCDataSen(int i, int j)
1786
if( GetCDataType(i,j) == Sen )
1787
return *(PCDataSen)GetData(i,j);
1788
return *PCDataSen();
1791
CDataSolid& JWWBlockList::GetCDataSolid(int i, int j)
1793
if( GetCDataType(i,j) == Solid )
1794
return *(PCDataSolid)GetData(i,j);
1795
return *PCDataSolid();
1798
CDataSunpou& JWWBlockList::GetCDataSunpou(int i, int j)
1800
if( GetCDataType(i,j) == Sunpou )
1801
return *(PCDataSunpou)GetData(i,j);
1802
return *PCDataSunpou();
1805
CDataTen& JWWBlockList::GetCDataTen(int i, int j)
1807
if( GetCDataType(i,j) == Ten )
1808
return *(PCDataTen)GetData(i,j);
1809
return *PCDataTen();
1812
CDataType JWWBlockList::GetCDataType(int i, int j)
1814
return GetDataType(i,j);
1817
void* JWWBlockList::GetData(unsigned int i, int j)
1820
for( unsigned int k=0; k < FBlockList.size(); k++ )
1822
if( i == PCDataList(FBlockList[k])->m_nNumber )
1823
return FDataList[l+j];
1824
l=l + PCDataList(FBlockList[k])->Count;
1826
return (void *)NULL;
1829
int JWWBlockList::GetDataListCount(unsigned int i)
1831
for(unsigned int k=0; k < FBlockList.size(); k++)
1833
if( i == PCDataList(FBlockList[k])->m_nNumber )
1834
return PCDataList(FBlockList[k])->Count;
1839
CDataType JWWBlockList::GetDataType(unsigned int i, int j)
1842
for( unsigned int k=0; k < FBlockList.size(); k++ )
1844
if( i == PCDataList(FBlockList[k])->m_nNumber )
1845
return FDataType[l+j];
1846
l=l + PCDataList(FBlockList[k])->Count;
1851
void JWWBlockList::AddBlockList(CDataList& CData)
1853
PCDataList data = new CDataList;
1855
FBlockList.push_back((PCDataBlock)data);
1858
void JWWBlockList::AddDataListEnko(CDataEnko& D)
1860
PCDataEnko data = new CDataEnko;
1862
FDataType.push_back(Enko);
1863
FDataList.push_back((PCDataList)data);
1866
void JWWBlockList::AddDataListMoji(CDataMoji& D)
1868
PCDataMoji data = new CDataMoji;
1870
FDataType.push_back(Moji);
1871
FDataList.push_back((PCDataList)data);
1874
void JWWBlockList::AddDataListSen(CDataSen& D)
1876
PCDataSen data = new CDataSen;
1878
FDataType.push_back(Sen);
1879
FDataList.push_back((PCDataList)data);
1882
void JWWBlockList::AddDataListSolid(CDataSolid& D)
1884
PCDataSolid data = new CDataSolid;
1886
FDataType.push_back(Solid);
1887
FDataList.push_back((PCDataList)data);
1890
void JWWBlockList::AddDataListSunpou(CDataSunpou& D)
1892
PCDataSunpou data = new CDataSunpou;
1894
FDataType.push_back(Sunpou);
1895
FDataList.push_back((PCDataList)data);
1898
void JWWBlockList::AddDataListTen(CDataTen& D)
1900
PCDataTen data = new CDataTen;
1902
FDataType.push_back(Ten);
1903
FDataList.push_back((PCDataList)data);
1906
void JWWBlockList::Init()
1908
for(unsigned int i=0; i < FBlockList.size(); i++)
1911
delete FBlockList[i];
1915
for(unsigned int i=0; i < FDataList.size(); i++)
1918
delete FDataList[i];
1924
void JWWBlockList::AddDataListBlock(CDataBlock& D)
1926
PCDataBlock data = new CDataBlock;
1928
FDataType.push_back(Block);
1929
FDataList.push_back((PCDataList)data);
1932
CDataBlock& JWWBlockList::GetCDataBlock(int i, int j)
1934
if( GetCDataType(i,j) == Block )
1935
return *PCDataBlock(GetData(i,j));
1936
return *PCDataBlock();