☆JWWファイルの超簡易表示 その2
以前、☆JWWファイルの超簡易表示
という記事で書いたコードのDrawdata手続きを更新しましたので載せておきますね。
前回は線と文字を適当に表示するだけでしたが、線、円・楕円・円弧、文字をもう少し それっぽく表示するようにしました。(レイヤー、ソリッドやSXFなどは全く考慮していませんけどね。)
指定フォルダから検索文字を含むJWWファイル一覧を作成し、 そのファイル名をクリックすると、検索文字を目立つように描画させて、 VE等の内容がきちんと訂正されているかをチェックするのに使っています。
前回は線と文字を適当に表示するだけでしたが、線、円・楕円・円弧、文字をもう少し それっぽく表示するようにしました。(レイヤー、ソリッドやSXFなどは全く考慮していませんけどね。)
procedure TForm1.Drawdata;
// 座標を変換
procedure Change_mm_dot(x1, x2, y1, y2: Double;
var ix1, ix2, iy1, iy2: Integer);
begin
ix1 := Round( x1 * mm_dot + ox );
iy1 := Round(-y1 * mm_dot + oy );
ix2 := Round( x2 * mm_dot + ox );
iy2 := Round(-y2 * mm_dot + oy );
end;
// 線及び円弧の線種・線色の設定
procedure LineSetting(Root: CData);
begin
// ペンの太さ
PaintBox1.Canvas.Pen.width := 0;
// ペンのスタイル
case Root.m_nPenStyle of
1: PaintBox1.Canvas.Pen.Style := psSolid;
2: PaintBox1.Canvas.Pen.Style := psDot;
3: PaintBox1.Canvas.Pen.Style := psDot;
4: PaintBox1.Canvas.Pen.Style := psDot;
5: PaintBox1.Canvas.Pen.Style := psDashDot;
6: PaintBox1.Canvas.Pen.Style := psDashDot;
7: PaintBox1.Canvas.Pen.Style := psDashDotDot;
8: PaintBox1.Canvas.Pen.Style := psDashDotDot;
9: PaintBox1.Canvas.Pen.Style := psDot;
end;
// ペンの色
case Root.m_nPenColor of
1: PaintBox1.Canvas.Pen.Color := RGB(0,192,192);
2: PaintBox1.Canvas.Pen.Color := clBlack;
3: PaintBox1.Canvas.Pen.Color := RGB(0,192,0);
4: PaintBox1.Canvas.Pen.Color := RGB(192,192,0);
5: PaintBox1.Canvas.Pen.Color := RGB(192,0,192);
6: PaintBox1.Canvas.Pen.Color := RGB(0,0,255);
7: PaintBox1.Canvas.Pen.Color := RGB(0,128,128);
8: PaintBox1.Canvas.Pen.Color := RGB(255,0,128);
9: PaintBox1.Canvas.Pen.Color := RGB(255,128,255);
end;
end;
// フォントの設定
procedure FontSetting(ACDataMoji: CDataMoji);
begin
// フォント名
PaintBox1.Canvas.Font.Name := ACDataMoji.m_strFontName;
// フォントの高さ
PaintBox1.Canvas.Font.Height := Round(ACDataMoji.m_dSizeY* mm_dot);
// フォントの色
case JWWHd.m_Moji[ACDataMoji.m_nMojiShu].m_anMojiCol of
1: PaintBox1.Canvas.Font.Color := RGB(0,192,192);
2: PaintBox1.Canvas.Font.Color := clBlack;
3: PaintBox1.Canvas.Font.Color := RGB(0,192,0);
4: PaintBox1.Canvas.Font.Color := RGB(192,192,0);
5: PaintBox1.Canvas.Font.Color := RGB(192,0,192);
6: PaintBox1.Canvas.Font.Color := RGB(0,0,255);
7: PaintBox1.Canvas.Font.Color := RGB(0,128,128);
8: PaintBox1.Canvas.Font.Color := RGB(255,0,128);
9: PaintBox1.Canvas.Font.Color := RGB(255,128,255);
end;
end;
var
I, ax3, ay3, ax4, ay4: Integer;
x1, x2, y1, y2, Hankei: Double;
ix1, ix2, iy1, iy2: Integer;
Moji: String;
Hajime, Owari: Double;
wx1,wy1,wx2,wy2: Double;
LF: TLogFont;
begin
// 用紙枠の描画
Draw_Paper_Frame;
// 線の描画
PaintBox1.Canvas.Pen.Color := clBlack;
for I := Low(JWWSen) to High(JWWSen) do
begin
x1 := JWWSen[I].m_start_x;
y1 := JWWSen[I].m_start_y;
x2 := JWWSen[I].m_end_x;
y2 := JWWSen[I].m_end_y;
// mm→dot変換
Change_mm_dot(x1, x2, y1, y2, ix1, ix2, iy1, iy2);
// 線の設定
LineSetting(JWWSen[I].Root);
//線の描画
PaintBox1.Canvas.MoveTo(ix1, iy1);
PaintBox1.Canvas.LineTo(ix2, iy2);
end;
// 円弧の描画
for I := Low(JWWEnko) to High(JWWEnko) do
begin
x1 := JWWEnko[I].m_start_x;
y1 := JWWEnko[I].m_start_y;
Hankei := JWWEnko[I].m_dHankei;
Hajime := JWWEnko[I].m_radKaishiKaku + JWWEnko[I].m_radKatamukiKaku;
Owari := JWWEnko[I].m_radKaishiKaku + JWWEnko[I].m_radEnkoKaku +
JWWEnko[I].m_radKatamukiKaku;
if JWWEnko[I].m_radKatamukiKaku < 0 then
begin
wx1 := X1-Hankei*JWWEnko[I].m_dHenpeiRitsu;
wy1 := Y1-Hankei;
wx2 := X1+Hankei*JWWEnko[I].m_dHenpeiRitsu;
wy2 := Y1+Hankei;
end
else
begin
wx1 := X1-Hankei;
wy1 := Y1-Hankei*JWWEnko[I].m_dHenpeiRitsu;
wx2 := X1+Hankei;
wy2 := Y1+Hankei*JWWEnko[I].m_dHenpeiRitsu;
end;
// 円弧の設定
LineSetting(JWWEnko[I].Root);
// mm→dot変換
Change_mm_dot(wx1, wx2, wy1, wy2, ix1, ix2, iy1, iy2);
// 円弧の描画
if JWWEnko[I].m_bZenEnFlg = 1 then
PaintBox1.Canvas.Ellipse(ix1, iy1,ix2,iy2) //円
else
begin
ax3 := Round( ((x1+Hankei*Cos(Hajime)))*MM_dot+ox);
ay3 := Round(-((y1+Hankei*Sin(Hajime)))*MM_dot+oy);
ax4 := Round( ((x1+Hankei*Cos(Owari)))*MM_dot+ox);
ay4 := Round(-((y1+Hankei*Sin(Owari)))*MM_dot+oy);
if (ax3 <> ax4) or (ay3 <> ay4) then
begin
if (JWWEnko[I].m_radEnkoKaku < 0) then
PaintBox1.Canvas.Arc(ix1,iy1,ix2,iy2,ax4,ay4,ax3,ay3)
else
PaintBox1.Canvas.Arc(ix1,iy1,ix2,iy2,ax3,ay3,ax4,ay4);
end;
end;
end;
// 文字の描画
for I := Low(JWWMoji) to High(JWWMoji) do
begin
x1 := JWWMoji[I].m_start_x;
y1 := JWWMoji[I].m_start_y;
x2 := JWWMoji[I].m_end_x;
y2 := JWWMoji[I].m_end_y;
Moji := JWWMoji[I].m_string;
// mm→dot変換
Change_mm_dot(x1, x2, y1, y2, ix1, ix2, iy1, iy2);
// フォントの設定
FontSetting(JWWMoji[I]);
// 文字の描画
GetObject(PaintBox1.Canvas.Font.Handle, SizeOf(LF), @LF);
SetTextAlign(PaintBox1.Canvas.Handle,TA_LEFT or TA_BOTTOM);
LF.lfEscapement := Round(JWWMoji[I].m_degKakudo*10);
PaintBox1.Canvas.Font.Handle := CreateFontIndirect(LF);
PaintBox1.Canvas.TextOut(ix1,iy1,moji);
end;
end;
指定フォルダから検索文字を含むJWWファイル一覧を作成し、 そのファイル名をクリックすると、検索文字を目立つように描画させて、 VE等の内容がきちんと訂正されているかをチェックするのに使っています。
| 固定リンク
