☆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等の内容がきちんと訂正されているかをチェックするのに使っています。
| 固定リンク