diff --git a/applications/fpvviewer/fpvectorialsrc/dxfvectorialreader.pas b/applications/fpvviewer/fpvectorialsrc/dxfvectorialreader.pas index 82702b19a..a9baf487e 100644 --- a/applications/fpvviewer/fpvectorialsrc/dxfvectorialreader.pas +++ b/applications/fpvviewer/fpvectorialsrc/dxfvectorialreader.pas @@ -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; diff --git a/applications/fpvviewer/fpvectorialsrc/fpvectorial.pas b/applications/fpvviewer/fpvectorialsrc/fpvectorial.pas index 5648a46bb..253b7abcc 100644 --- a/applications/fpvviewer/fpvectorialsrc/fpvectorial.pas +++ b/applications/fpvviewer/fpvectorialsrc/fpvectorial.pas @@ -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; diff --git a/applications/fpvviewer/fpvectorialsrc/fpvtocanvas.pas b/applications/fpvviewer/fpvectorialsrc/fpvtocanvas.pas index a6cb418bb..4690c9ccb 100644 --- a/applications/fpvviewer/fpvectorialsrc/fpvtocanvas.pas +++ b/applications/fpvviewer/fpvectorialsrc/fpvtocanvas.pas @@ -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}