Difference between revisions of "psFile(API)"

From EosPedia
Jump to: navigation, search
(Created page with "Objects/DataExpress/'''psFile''' is API for ps file. == constant == #define MAX_STRING_LENGTH 256 #define PS_FILE_STATUS_ERROR (0) #d...")
 
Line 1: Line 1:
Objects/DataExpress/'''psFile''' is API for [[ps]] file.
+
Objects/DataExpress/'''psFile''' is [[API]] for [[PostScript]] file.
  
 
== constant ==
 
== constant ==
 +
=== Define of ps file ===
 
  #define MAX_STRING_LENGTH 256
 
  #define MAX_STRING_LENGTH 256
 
                              
 
                              
Line 20: Line 21:
 
  #define PROLOG_END_PRO        (9)
 
  #define PROLOG_END_PRO        (9)
  
 +
=== Draw Center marker ===
 +
Size
 +
#define PS_IMAGE_CENTRE_LINE_WIDTH  (0.1)
 +
#define PS_IMAGE_CENTRE_MARK_LENGTH (0.01)
 +
 +
=== Draw Scale ===
 +
Position
 
  typedef enum psImageScaleMode {
 
  typedef enum psImageScaleMode {
 
     psImageScaleModeBottomLeft = 1,
 
     psImageScaleModeBottomLeft = 1,
Line 25: Line 33:
 
  } psImageScaleMode;
 
  } psImageScaleMode;
  
#define PS_IMAGE_CENTRE_LINE_WIDTH  (0.1)
+
Size
#define PS_IMAGE_CENTRE_MARK_LENGTH (0.01)
+
 
+
 
  #define PS_IMAGE_SCALE_LINE_WIDTH0 (0.2)
 
  #define PS_IMAGE_SCALE_LINE_WIDTH0 (0.2)
 
  #define PS_IMAGE_SCALE_LINE_WIDTH1 (0.1)
 
  #define PS_IMAGE_SCALE_LINE_WIDTH1 (0.1)
Line 41: Line 47:
 
  #define PS_IMAGE_SCALE_LINE_LENGTH40 (-1.0)
 
  #define PS_IMAGE_SCALE_LINE_LENGTH40 (-1.0)
  
 +
=== Draw Contour Mode ===
 
  #define psContourMode_DifferentLineWidthContour (0x01)
 
  #define psContourMode_DifferentLineWidthContour (0x01)
 
  #define psContourMode_SameLineWidthContour      (0x02)
 
  #define psContourMode_SameLineWidthContour      (0x02)
  
 +
=== Draw Circle ===
 +
Type
 +
#define PS_LINE_CIRCLE_MODE (0)
 +
#define PS_FILL_WHITE_CIRCLE_MODE (1)
 +
#define PS_FILL_BLACK_CIRCLE_MODE (2)
 +
 +
=== Plot ===
 
  #define PS_PLOT_MODE_AXIS (0x000000ff)
 
  #define PS_PLOT_MODE_AXIS (0x000000ff)
 
  #define PS_PLOT_MODE_AXIS_X_AXIS_POS (0x00000001) /* 0: Down 1: Up */
 
  #define PS_PLOT_MODE_AXIS_X_AXIS_POS (0x00000001) /* 0: Down 1: Up */
 
  #define PS_PLOT_MODE_AXIS_Y_AXIS_POS (0x00000002) /* 0: Left 1: Write */
 
  #define PS_PLOT_MODE_AXIS_Y_AXIS_POS (0x00000002) /* 0: Left 1: Write */
 
  #define PS_PLOT_MODE_AXIS (0x000000ff)
 
  #define PS_PLOT_MODE_AXIS (0x000000ff)
 
#define PS_LINE_CIRCLE_MODE (0)
 
#define PS_FILL_WHITE_CIRCLE_MODE (1)
 
#define PS_FILL_BLACK_CIRCLE_MODE (2)
 
  
 
  #define PS_PLOT_SCALE_X_AXIS_Y_POSITION_DOWN ( -5.0)
 
  #define PS_PLOT_SCALE_X_AXIS_Y_POSITION_DOWN ( -5.0)
Line 58: Line 68:
  
 
== struct ==
 
== struct ==
typedef long  psParaTypeInteger;
+
=== Management data ===
typedef double psParaTypeReal;
+
Manage ps file data by using list.
 
+
typedef struct psInfo {
+
    psParaTypeInteger prologInfoNum;
+
    char**            prologInfo;
+
char              label[MAX_STRING_LENGTH];
+
    psParaTypeInteger page;
+
    psParaTypeInteger status;
+
} psInfo;
+
 
+
typedef struct psPageInfo psPageInfo;
+
 
+
struct psPageInfo {
+
psParaTypeInteger page;
+
psParaTypeInteger byte;
+
long start;
+
long end;
+
psPageInfo* next;
+
};
+
 
+
 
  typedef struct psFile {
 
  typedef struct psFile {
 
  FILE* fpt;
 
  FILE* fpt;
Line 89: Line 80:
 
  } psFile;
 
  } psFile;
  
 +
typedef long  psParaTypeInteger;
 +
typedef double psParaTypeReal;
 +
 +
=== struct of Drawing Setting ===
 
  typedef struct psImageInfo {
 
  typedef struct psImageInfo {
 
  /* For Image Space */
 
  /* For Image Space */
Line 174: Line 169:
 
  } psImageInfo;
 
  } psImageInfo;
  
 +
=== ps file Information ===
 +
typedef struct psInfo {
 +
    psParaTypeInteger prologInfoNum;
 +
    char**            prologInfo;
 +
char              label[MAX_STRING_LENGTH];
 +
    psParaTypeInteger page;
 +
    psParaTypeInteger status;
 +
} psInfo;
 +
 +
=== Page Information ===
 +
typedef struct psPageInfo psPageInfo;
 +
 +
struct psPageInfo {
 +
psParaTypeInteger page;
 +
psParaTypeInteger byte;
 +
long start;
 +
long end;
 +
psPageInfo* next;
 +
};
 +
 +
=== Plot ===
 
  typedef struct psPlotInfo {
 
  typedef struct psPlotInfo {
 
     psParaTypeReal scaleX;
 
     psParaTypeReal scaleX;
Line 199: Line 215:
  
 
== API ==
 
== API ==
===psFileInit===
+
=== Initialize ===
 +
psfileInformationps->info->prologInfoをメモリ確保して新規Createし,psfileps->fptを新規Createします.<br>
 +
また,以降で使用するPostScriptの略記Commandもここで定義しています.
 
  extern void psFileInit(psFile* ps, psParaTypeInteger mode);
 
  extern void psFileInit(psFile* ps, psParaTypeInteger mode);
  
===psFilePage===
+
=== file読み出し ===
 +
filefptを読み出し,psへ格納します.
 +
extern void psFileRead(psFile* ps, FILE* fpt, long mode);
 +
 
 +
=== Header・フッタ・トレイラのWrite ===
 +
psfileps->fptにHeaderをWriteます.(ラベル: ps->info.label, ページNo.: ps->info.page)
 +
mode=0の場合は左下部から各1cmずつ右上の位置を,そうでない場合は左下部の位置を原点とします.
 
  extern void psFilePageStart(psFile* ps, psParaTypeInteger mode);
 
  extern void psFilePageStart(psFile* ps, psParaTypeInteger mode);
 +
psfileps->fptにフッタをWriteます.
 
  extern void psFilePageEnd(psFile* ps, psParaTypeInteger mode);
 
  extern void psFilePageEnd(psFile* ps, psParaTypeInteger mode);
 
+
psfileps->fptにトレイラを追加します.
===psFileEnd===
+
 
  extern void psFileEnd(psFile* ps);
 
  extern void psFileEnd(psFile* ps);
  
===psFileImage===
+
=== data判定 ===
 +
文字列sがHeaderの場合は1を,そうでない場合は0を返します.
 +
extern long psFileIsStartPage(psFile* ps, char* s);
 +
文字列sがフッタの場合は1を,そうでない場合は0を返します.
 +
extern long psFileIsEndPage(psFile* ps, char* s);
 +
 
 +
=== 描画 ===
 +
基本的にこれらの[[API]]は引数psImageInfoの([[#描画Setting]])を使用したSettingで描画します.<br>
 +
<br>
 +
 
 +
==== 画像data ====
 +
画像dataim.imageをpsfileps->fptへWriteます.<br>
 +
フラグ(imのメンバ)によって画像の種類をSettingできます.
 
  extern void psFileImage            (psFile* ps, psImageInfo im, psParaTypeInteger mode);
 
  extern void psFileImage            (psFile* ps, psImageInfo im, psParaTypeInteger mode);
 +
<table border="1">
 +
<tr>
 +
<th>imのフラグ</th>
 +
<th>Description</th>
 +
</tr>
 +
<tr>
 +
<td>flagRGBColor</td>
 +
<td>RGB形式で書き込む</td>
 +
</tr>
 +
<tr>
 +
<td>flagRGBGradientColor</td>
 +
<td>RGB(グラデーション)形式で書き込む</td>
 +
</tr>
 +
<tr>
 +
<td>flagHSBColor</td>
 +
<td>HSB形式で書き込む(未対応)</td>
 +
</tr>
 +
<tr>
 +
<td>flagHSBGradientColor</td>
 +
<td>HSB(グラデーション)形式で書き込む(未対応)</td>
 +
</tr>
 +
<tr>
 +
<td>Otherwise</td>
 +
<td>モノクロ256階調形式で書き込む</td>
 +
</tr>
 +
</table>
 +
各フラグは上の方が優先され,重複はしない.<br>
 +
<br>
 +
 +
==== 円 ====
 +
im.image内の正のdataを半径[pt]とした円をcoordinates(im.width, imheight)[pt]まで描画します.
 
  extern void psFileImageByCircles  (psFile* ps, psImageInfo im, psParaTypeInteger mode);
 
  extern void psFileImageByCircles  (psFile* ps, psImageInfo im, psParaTypeInteger mode);
extern void psFileImageCentre      (psFile* ps, psImageInfo im, psParaTypeInteger mode);
+
psに中心(cx, cy)[pt],半径r[pt]の円を描画します.modeにより円のタイプが選択できます.
extern void psFileImageScale      (psFile* ps, psImageInfo im, psParaTypeInteger mode);
+
  extern void psFileCircleCreate(psFile* ps, float cx, float cy, float r, long mode);
  extern void psFileImageSpaceSet    (psFile* ps, psImageInfo im, psParaTypeInteger mode);
+
<table border="1">
extern void psFileImageSpaceRotateSet    (psFile* ps, psImageInfo im, psParaTypeInteger mode);
+
<tr>
extern void psFileImageSpaceRestore(psFile* ps, psImageInfo im, psParaTypeInteger mode);
+
<th>mode</th>
extern void psFileImageSpaceRotateRestore(psFile* ps, psImageInfo im, psParaTypeInteger mode);
+
<th>値</th>
 +
<th>円のタイプ</th>
 +
</tr>
 +
<tr>
 +
<td>PS_LINE_CIRCLE_MODE</td>
 +
<td>0</td>
 +
<td>塗りつぶしなし</td>
 +
</tr>
 +
<tr>
 +
<td>PS_FILL_WHITE_CIRCLE_MODE</td>
 +
<td>1</td>
 +
<td>白で塗りつぶす</td>
 +
</tr>
 +
<tr>
 +
<td>PS_FILL_BLACK_CIRCLE_MODE</td>
 +
<td>2</td>
 +
<td>黒で塗りつぶす</td>
 +
</tr>
 +
</table>
 +
<br>
  
===psFileLine===
+
==== ====
 +
psに描画する線のWidthlineWidthをSettingします.
 
  extern void psFileLineWidthSet    (psFile* ps, float lineWidth);
 
  extern void psFileLineWidthSet    (psFile* ps, float lineWidth);
 +
psに線(x1, y1) -> (x2, y2)を描画します.
 
  extern void psFileLineDraw(psFile* ps, float x1,float y1,float x2,float y2);
 
  extern void psFileLineDraw(psFile* ps, float x1,float y1,float x2,float y2);
 +
 +
==== 樹形図 ====
 +
psに2つの点をつなぐ樹形図を描画します.
 +
width: 2点間の距離(Width), heightN: 要素Nに引く線の長さ(高さ)(N=1, 2), (x, y): 上段に引く線の中点
 
  extern void psFileDendgramLineDraw(psFile* ps, float width,float height1, float height2, float x, float y);
 
  extern void psFileDendgramLineDraw(psFile* ps, float width,float height1, float height2, float x, float y);
  
===psFileString===
+
==== 文字列 ====
 +
psに表示する文字列のフォントfontname,サイズfontsizeをSettingします.
 
  extern void psFileStringStatusSet(psFile* ps, char* fontname, double fontsize);
 
  extern void psFileStringStatusSet(psFile* ps, char* fontname, double fontsize);
 +
psに表示する文字列のフォント・サイズをデフォルトSettingします.
 
  extern void psFileStringDefaultStatusSet(psFile* ps);
 
  extern void psFileStringDefaultStatusSet(psFile* ps);
 +
psに文字列messageをcoordinates(x, y)[pt]に表示します.
 
  extern void psFileString (psFile* ps, char* message, double x, double y, psParaTypeInteger mode);
 
  extern void psFileString (psFile* ps, char* message, double x, double y, psParaTypeInteger mode);
  
===psFileContour===
+
==== 境界線 ====
 +
psに画像im.floatimageの境界線を描画します.
 
  extern void psFileContour(psFile* ps, psImageInfo im, psParaTypeInteger mode);
 
  extern void psFileContour(psFile* ps, psImageInfo im, psParaTypeInteger mode);
  
===psFileCircle===
+
==== 中心マーカ ====
  extern void psFileCircleCreate(psFile* ps, float cx, float cy, float r, long mode);
+
psに中心マーカを描画します.
 +
  extern void psFileImageCentre      (psFile* ps, psImageInfo im, psParaTypeInteger mode);
  
===psFileRead===
+
==== スケール ====
  extern void psFileRead(psFile* ps, FILE* fpt, long mode);
+
psにスケールを描画します.mode=psImageScaleModeBottomLeftの場合は左下部に,mode=psImageScaleModeCenterの場合は左中部に描画します.
 +
  extern void psFileImageScale      (psFile* ps, psImageInfo im, psParaTypeInteger mode);
  
===psFileUtil===
+
==== 描画Setting ====
  extern long psFileIsStartPage(psFile* ps, char* s);
+
文字及び点のスケールを(im.scaleX, im.scaleY)[pt]で,原点を(im.translateX, im.translateY)[inch]とします.
  extern long psFileIsEndPage(psFile* ps, char* s);
+
  extern void psFileImageSpaceSet    (psFile* ps, psImageInfo im, psParaTypeInteger mode);
 +
文字及び点のスケール,原点を元に戻します.
 +
extern void psFileImageSpaceRestore(psFile* ps, psImageInfo im, psParaTypeInteger mode);
 +
文字及び点の回転角度im.angleをSettingします.
 +
  extern void psFileImageSpaceRotateSet    (psFile* ps, psImageInfo im, psParaTypeInteger mode);
 +
文字及び点の回転角度を元に戻します.
 +
extern void psFileImageSpaceRotateRestore(psFile* ps, psImageInfo im, psParaTypeInteger mode);
 +
<br>
 +
これらの[[API]]は基本的に同じ~Setと~Restoreで処理を挟んで使用します.このとき,挟まれた処理にのみ~SetでのSettingが反映されます.<br>
 +
<br>
 +
使用Example
 +
<pre>
 +
psFileImageSpaceSet( Setting1 )
 +
(処理1)
 +
psFileImageSpaceRotateSet( 角度Setting1 )
 +
(処理2)
 +
psFileImageSpaceSet( Setting2 )
 +
(処理3)
 +
psFileImageSpaceRestore( ... )
 +
(処理4)
 +
psFileImageSpaceRotateRestore( ... )
 +
(処理5)
 +
psFileImageSpaceRestore( ... )
 +
</pre>
 +
このExampleで,(Setting1)の有効範囲は(処理1) ~ (処理5),(角度Setting1)の有効範囲は(処理2) ~ (処理4),(Setting2)の有効範囲は(処理3)となっています.但し,(処理3)のスケール・原点については(Setting2)の方が(Setting1)よりも後にSettingされているので,こちらが反映されます.<br>
 +
<br>

Revision as of 04:09, 9 October 2014

Objects/DataExpress/psFile is API for PostScript file.

constant

Define of ps file

#define MAX_STRING_LENGTH 256
                            
#define PS_FILE_STATUS_ERROR     (0)
#define PS_FILE_STATUS_OK        (1)
#define PROLOG_STRING_NUM    (11)
#define PROLOG_VERSION        (0)
#define PROLOG_TITLE          (1)
#define PROLOG_CREATOR        (2)
#define PROLOG_CREATION_DATE  (3)
#define PROLOG_FOR            (4)
#define PROLOG_BOUND_BOX      (5)
#define PROLOG_PAGES          (6)
#define PROLOG_DOC_FONTS      (7)
#define PROLOG_END_DOC        (8)
#define PROLOG_END_PRO        (9)

Draw Center marker

Size

#define PS_IMAGE_CENTRE_LINE_WIDTH  (0.1)
#define PS_IMAGE_CENTRE_MARK_LENGTH (0.01)

Draw Scale

Position

typedef enum psImageScaleMode {
    psImageScaleModeBottomLeft = 1,
    psImageScaleModeCenter     = 2
} psImageScaleMode;

Size

#define PS_IMAGE_SCALE_LINE_WIDTH0 (0.2)
#define PS_IMAGE_SCALE_LINE_WIDTH1 (0.1)
#define PS_IMAGE_SCALE_LINE_LENGTH0 (10.0)
#define PS_IMAGE_SCALE_LINE_LENGTH1 (5.0)
#define PS_IMAGE_SCALE_LINE_LENGTH2 (3.0)
#define PS_IMAGE_SCALE_LINE_LENGTH3 (2.0)
#define PS_IMAGE_SCALE_LINE_LENGTH4 (1.0)
#define PS_IMAGE_SCALE_LINE_LENGTH00 (-10.0)
#define PS_IMAGE_SCALE_LINE_LENGTH10 (-5.0)
#define PS_IMAGE_SCALE_LINE_LENGTH20 (-3.0)
#define PS_IMAGE_SCALE_LINE_LENGTH30 (-2.0)
#define PS_IMAGE_SCALE_LINE_LENGTH40 (-1.0)

Draw Contour Mode

#define psContourMode_DifferentLineWidthContour (0x01)
#define psContourMode_SameLineWidthContour      (0x02)

Draw Circle

Type

#define PS_LINE_CIRCLE_MODE (0)
#define PS_FILL_WHITE_CIRCLE_MODE (1)
#define PS_FILL_BLACK_CIRCLE_MODE (2)

Plot

#define PS_PLOT_MODE_AXIS (0x000000ff)
#define PS_PLOT_MODE_AXIS_X_AXIS_POS (0x00000001) /* 0: Down 1: Up */
#define PS_PLOT_MODE_AXIS_Y_AXIS_POS (0x00000002) /* 0: Left 1: Write */
#define PS_PLOT_MODE_AXIS (0x000000ff)
#define PS_PLOT_SCALE_X_AXIS_Y_POSITION_DOWN ( -5.0)
#define PS_PLOT_SCALE_X_AXIS_Y_POSITION_UP   (105.0)
#define PS_PLOT_SCALE_X_AXIS_LENGTH     (1.0)

struct

Management data

Manage ps file data by using list.

typedef struct psFile {
	FILE* fpt;
	psInfo info;
	long headEnd;
	psPageInfo* current;
	psPageInfo* top;
	psPageInfo* end;
	long byte;
} psFile;
typedef long   psParaTypeInteger;
typedef double psParaTypeReal;

struct of Drawing Setting

typedef struct psImageInfo {
	/* For Image Space */
	psParaTypeReal scaleX;
	psParaTypeReal scaleY;
	psParaTypeReal translateX;
	psParaTypeReal translateY;
	psParaTypeReal angle;

	/* Image Size */
	psParaTypeInteger width;
	psParaTypeInteger height;
	psParaTypeInteger section;
	/* For Contour */
	psParaTypeInteger bps;
	psParaTypeInteger nContour;
	psParaTypeReal* contourLevel;
	/* For Density Image */
	unsigned char* image;
	/* For Contour */
	float* floatImage;
	psParaTypeReal contourLineColorChange;
	psParaTypeReal contourLineWidthStart;
	psParaTypeReal contourLineWidthStep;

	/* For 3D Contour */
	psParaTypeReal eyeX; /* Eye Position */
	psParaTypeReal eyeY;
	psParaTypeReal eyeZ;
	psParaTypeReal pointX; /* Projection Surface Position */
	psParaTypeReal pointY; /* Surface Normal: (position - eye) */
	psParaTypeReal pointZ;

	/* For Colour */
	psParaTypeInteger flagRGBColor;	
	psParaTypeInteger flagRGBGradientColor;	
	psParaTypeReal Red;
	psParaTypeReal Green;
	psParaTypeReal Blue;
	psParaTypeReal RedFirst;
	psParaTypeReal GreenFirst;
	psParaTypeReal BlueFirst;
	psParaTypeReal RedLast;
	psParaTypeReal GreenLast;
	psParaTypeReal BlueLast;
	psParaTypeInteger flagHSBColor;	
	psParaTypeInteger flagHSBGradientColor;	
	psParaTypeReal Hue;
	psParaTypeReal Saturation;
	psParaTypeReal Brightness;
	psParaTypeReal HueFirst;
	psParaTypeReal SaturationFirst;
	psParaTypeReal BrightnessFirst;
	psParaTypeReal HueLast;
	psParaTypeReal SaturationLast;
	psParaTypeReal BrightnessLast;

	/* For Line Colour */
	psParaTypeInteger flagLineRGBColor;	
	psParaTypeInteger flagLineRGBGradientColor;	
	psParaTypeReal LineRed;
	psParaTypeReal LineGreen;
	psParaTypeReal LineBlue;
	psParaTypeReal LineRedFirst;
	psParaTypeReal LineGreenFirst;
	psParaTypeReal LineBlueFirst;
	psParaTypeReal LineRedLast;
	psParaTypeReal LineGreenLast;
	psParaTypeReal LineBlueLast;
	psParaTypeInteger flagLineHSBColor;	
	psParaTypeInteger flagLineHSBGradientColor;	
	psParaTypeReal LineHue;
	psParaTypeReal LineSaturation;
	psParaTypeReal LineBrightness;
	psParaTypeReal LineHueFirst;
	psParaTypeReal LineSaturationFirst;
	psParaTypeReal LineBrightnessFirst;
	psParaTypeReal LineHueLast;
	psParaTypeReal LineSaturationLast;
	psParaTypeReal LineBrightnessLast;

	/* For Circle */
	psParaTypeReal CircleRadius;
	long dummy;
} psImageInfo;

ps file Information

typedef struct psInfo {
    psParaTypeInteger prologInfoNum;
    char**            prologInfo;
	char              label[MAX_STRING_LENGTH];
    psParaTypeInteger page;
    psParaTypeInteger status;
} psInfo;

Page Information

typedef struct psPageInfo psPageInfo;
struct psPageInfo {
	psParaTypeInteger page;
	psParaTypeInteger byte;
	long start;
	long end;
	psPageInfo* next;
};

Plot

typedef struct psPlotInfo {
    psParaTypeReal scaleX;
    psParaTypeReal scaleY;
    psParaTypeReal translateX;
    psParaTypeReal translateY;

    psParaTypeReal dX;
    psParaTypeReal dXValue;
    psParaTypeReal minX;
    psParaTypeReal centreX;
    psParaTypeReal maxX;
    char*          labelX;

    psParaTypeReal dY;
    psParaTypeReal dYValue;
    psParaTypeReal minY;
    psParaTypeReal centreY;
    psParaTypeReal maxY;
    char*          labelY;

    psParaTypeInteger nData;
    psParaTypeReal *data;
} psPlotInfo;

API

Initialize

psfileInformationps->info->prologInfoをメモリ確保して新規Createし,psfileps->fptを新規Createします.
また,以降で使用するPostScriptの略記Commandもここで定義しています.

extern void psFileInit(psFile* ps, psParaTypeInteger mode);

file読み出し

filefptを読み出し,psへ格納します.

extern void psFileRead(psFile* ps, FILE* fpt, long mode);

Header・フッタ・トレイラのWrite

psfileps->fptにHeaderをWriteます.(ラベル: ps->info.label, ページNo.: ps->info.page) mode=0の場合は左下部から各1cmずつ右上の位置を,そうでない場合は左下部の位置を原点とします.

extern void psFilePageStart(psFile* ps, psParaTypeInteger mode);

psfileps->fptにフッタをWriteます.

extern void psFilePageEnd(psFile* ps, psParaTypeInteger mode);

psfileps->fptにトレイラを追加します.

extern void psFileEnd(psFile* ps);

data判定

文字列sがHeaderの場合は1を,そうでない場合は0を返します.

extern long psFileIsStartPage(psFile* ps, char* s);

文字列sがフッタの場合は1を,そうでない場合は0を返します.

extern long psFileIsEndPage(psFile* ps, char* s);

描画

基本的にこれらのAPIは引数psImageInfoの(#描画Setting)を使用したSettingで描画します.

画像data

画像dataim.imageをpsfileps->fptへWriteます.
フラグ(imのメンバ)によって画像の種類をSettingできます.

extern void psFileImage            (psFile* ps, psImageInfo im, psParaTypeInteger mode);
imのフラグ Description
flagRGBColor RGB形式で書き込む
flagRGBGradientColor RGB(グラデーション)形式で書き込む
flagHSBColor HSB形式で書き込む(未対応)
flagHSBGradientColor HSB(グラデーション)形式で書き込む(未対応)
Otherwise モノクロ256階調形式で書き込む

各フラグは上の方が優先され,重複はしない.

im.image内の正のdataを半径[pt]とした円をcoordinates(im.width, imheight)[pt]まで描画します.

extern void psFileImageByCircles   (psFile* ps, psImageInfo im, psParaTypeInteger mode);

psに中心(cx, cy)[pt],半径r[pt]の円を描画します.modeにより円のタイプが選択できます.

extern void psFileCircleCreate(psFile* ps, float cx, float cy, float r, long mode);
mode 円のタイプ
PS_LINE_CIRCLE_MODE 0 塗りつぶしなし
PS_FILL_WHITE_CIRCLE_MODE 1 白で塗りつぶす
PS_FILL_BLACK_CIRCLE_MODE 2 黒で塗りつぶす


psに描画する線のWidthlineWidthをSettingします.

extern void psFileLineWidthSet     (psFile* ps, float lineWidth);

psに線(x1, y1) -> (x2, y2)を描画します.

extern void psFileLineDraw(psFile* ps, float x1,float y1,float x2,float y2);

樹形図

psに2つの点をつなぐ樹形図を描画します. width: 2点間の距離(Width), heightN: 要素Nに引く線の長さ(高さ)(N=1, 2), (x, y): 上段に引く線の中点

extern void psFileDendgramLineDraw(psFile* ps, float width,float height1, float height2, float x, float y);

文字列

psに表示する文字列のフォントfontname,サイズfontsizeをSettingします.

extern void psFileStringStatusSet(psFile* ps, char* fontname, double fontsize);

psに表示する文字列のフォント・サイズをデフォルトSettingします.

extern void psFileStringDefaultStatusSet(psFile* ps);

psに文字列messageをcoordinates(x, y)[pt]に表示します.

extern void psFileString (psFile* ps, char* message, double x, double y, psParaTypeInteger mode);

境界線

psに画像im.floatimageの境界線を描画します.

extern void psFileContour(psFile* ps, psImageInfo im, psParaTypeInteger mode);

中心マーカ

psに中心マーカを描画します.

extern void psFileImageCentre      (psFile* ps, psImageInfo im, psParaTypeInteger mode);

スケール

psにスケールを描画します.mode=psImageScaleModeBottomLeftの場合は左下部に,mode=psImageScaleModeCenterの場合は左中部に描画します.

extern void psFileImageScale       (psFile* ps, psImageInfo im, psParaTypeInteger mode);

描画Setting

文字及び点のスケールを(im.scaleX, im.scaleY)[pt]で,原点を(im.translateX, im.translateY)[inch]とします.

extern void psFileImageSpaceSet    (psFile* ps, psImageInfo im, psParaTypeInteger mode);

文字及び点のスケール,原点を元に戻します.

extern void psFileImageSpaceRestore(psFile* ps, psImageInfo im, psParaTypeInteger mode);

文字及び点の回転角度im.angleをSettingします.

extern void psFileImageSpaceRotateSet    (psFile* ps, psImageInfo im, psParaTypeInteger mode);

文字及び点の回転角度を元に戻します.

extern void psFileImageSpaceRotateRestore(psFile* ps, psImageInfo im, psParaTypeInteger mode);


これらのAPIは基本的に同じ~Setと~Restoreで処理を挟んで使用します.このとき,挟まれた処理にのみ~SetでのSettingが反映されます.

使用Example

psFileImageSpaceSet( Setting1 )
	(処理1)
	psFileImageSpaceRotateSet( 角度Setting1 )
		(処理2)
		psFileImageSpaceSet( Setting2 )
			(処理3)
		psFileImageSpaceRestore( ... )
		(処理4)
	psFileImageSpaceRotateRestore( ... )
	(処理5)
psFileImageSpaceRestore( ... )

このExampleで,(Setting1)の有効範囲は(処理1) ~ (処理5),(角度Setting1)の有効範囲は(処理2) ~ (処理4),(Setting2)の有効範囲は(処理3)となっています.但し,(処理3)のスケール・原点については(Setting2)の方が(Setting1)よりも後にSettingされているので,こちらが反映されます.