fpvectorial: Advances color support

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1556 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2011-04-08 07:10:36 +00:00
parent fb337ed49a
commit dfce58e752
3 changed files with 32 additions and 9 deletions

View File

@ -52,7 +52,7 @@ type
TPolylineElement = record
X, Y: Double;
Color: TFPColor;
Color: TvColor;
end;
TSPLineElement = record
@ -108,7 +108,7 @@ type
procedure ReadENTITIES_POINT(ATokens: TDXFTokens; AData: TvVectorialDocument);
function GetCoordinateValue(AStr: shortstring): Double;
//
function DXFColorIndexToFPColor(AColorIndex: Integer): TFPColor;
function DXFColorIndexToVColor(AColorIndex: Integer): TvColor;
public
{ General reading methods }
Tokenizer: TDXFTokenizer;
@ -1084,7 +1084,7 @@ begin
SetLength(Polyline, curPoint+1);
Polyline[curPoint].X := 0;
Polyline[curPoint].Y := 0;
Polyline[curPoint].Color := colBlack;
Polyline[curPoint].Color := clvBlack;
for i := 0 to ATokens.Count - 1 do
begin
@ -1105,7 +1105,7 @@ begin
62:
begin
if (CurToken.FloatValue >= 0) and (CurToken.FloatValue <= 15) then
Polyline[curPoint].Color := DXFColorIndexToFPColor(Trunc(CurToken.FloatValue));
Polyline[curPoint].Color := DXFColorIndexToVColor(Trunc(CurToken.FloatValue));
end;
end;
end;
@ -1128,7 +1128,7 @@ begin
{$endif}
for i := 1 to Length(Polyline)-1 do
begin
AData.AddLineToPath(Polyline[i].X, Polyline[i].Y);
AData.AddLineToPath(Polyline[i].X, Polyline[i].Y, Polyline[i].Color);
{$ifdef FPVECTORIALDEBUG_POLYLINE}
Write(Format(' %f,%f', [Polyline[i].X, Polyline[i].Y]));
{$endif}
@ -1227,10 +1227,13 @@ begin
Result := StrToFloat(Copy(AStr, 2, Length(AStr) - 1));}
end;
function TvDXFVectorialReader.DXFColorIndexToFPColor(AColorIndex: Integer
): TFPColor;
function TvDXFVectorialReader.DXFColorIndexToVColor(AColorIndex: Integer
): TvColor;
begin
if (AColorIndex <= 0) and (AColorIndex <= 15) then
Result := AUTOCAD_COLOR_PALETTE[AColorIndex]
else
raise Exception.Create(Format('[TvDXFVectorialReader.DXFColorIndexToFPVColor] Invalid DXF Color Index: %d', [AColorIndex]));
end;
constructor TvDXFVectorialReader.Create;

View File

@ -48,6 +48,8 @@ const
FPValphaTransparent = $00;
FPValphaOpaque = $FF;
clvBlack: TvColor = (Red: $00; Green: $00; Blue: $00; Alpha: FPValphaOpaque);
type
T3DPoint = record
X, Y, Z: Double;

View File

@ -11,8 +11,9 @@ uses
{$ifdef USE_LCL_CANVAS}
Graphics, LCLIntf,
{$else}
fpcanvas, fpimage,
fpcanvas,
{$endif}
fpimage,
fpvectorial;
procedure DrawFPVectorialToCanvas(ASource: TvVectorialDocument;
@ -29,6 +30,21 @@ implementation
{$define FPVECTORIALDEBUG}
{$endif}
{$ifdef USE_LCL_CANVAS}
function VColorToTColor(AVColor: TvColor): TColor; inline;
begin
Result := RGBToColor(AVColor.Red, AVColor.Green, AVColor.Blue);
end;
{$endif}
function VColorToFPColor(AVColor: TvColor): TFPColor; inline;
begin
Result.Red := AVColor.Red;
Result.Green := AVColor.Green;
Result.Blue := AVColor.Blue;
Result.Alpha := AVColor.Alpha;
end;
function Rotate2DPoint(P,Fix :TPoint; alpha:double): TPoint;
var
sinus, cosinus : Extended;
@ -174,7 +190,9 @@ begin
end;
st2DLine, st3DLine:
begin
ADest.Pen.Color := {$ifdef USE_LCL_CANVAS}VColorToTColor(Cur2DSegment.Color);{$else}VColorToFPColor(Cur2DSegment.Color);{$endif}
ADest.LineTo(CoordToCanvasX(Cur2DSegment.X), CoordToCanvasY(Cur2DSegment.Y));
ADest.Pen.Color := clBlack;
{$ifdef FPVECTORIAL_TOCANVAS_DEBUG}
Write(Format(' L%d,%d', [CoordToCanvasX(Cur2DSegment.X), CoordToCanvasY(Cur2DSegment.Y)]));
{$endif}