You've already forked lazarus-ccr
Unfinishes linux fixes
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1495 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@@ -326,7 +326,7 @@ end;
|
||||
procedure TvDXFVectorialReader.ReadHEADER(ATokens: TDXFTokens;
|
||||
AData: TvVectorialDocument);
|
||||
var
|
||||
i: Integer;
|
||||
i, j: Integer;
|
||||
CurToken: TDXFToken;
|
||||
begin
|
||||
i := 0;
|
||||
@@ -348,12 +348,23 @@ begin
|
||||
// This indicates the size of the document
|
||||
else if CurToken.StrValue = '$LIMMAX' then
|
||||
begin
|
||||
{$Warning Actually verify if the values are present in this order}
|
||||
CurToken := TDXFToken(ATokens.Items[i+1]); // If Group 10
|
||||
aData.Width := StrToFloat(CurToken.StrValue);
|
||||
CurToken := TDXFToken(ATokens.Items[i+2]); // If Group 20
|
||||
aData.Height := StrToFloat(CurToken.StrValue);
|
||||
Inc(i, 2);
|
||||
// Check the next 2 items and verify if they are the values of the size of the document
|
||||
for j := 0 to 1 do
|
||||
begin
|
||||
CurToken := TDXFToken(ATokens.Items[i+1]);
|
||||
case CurToken.GroupCode of
|
||||
10:
|
||||
begin;
|
||||
aData.Width := StrToFloat(CurToken.StrValue, FPointSeparator);
|
||||
Inc(i);
|
||||
end;
|
||||
20:
|
||||
begin
|
||||
aData.Height := StrToFloat(CurToken.StrValue, FPointSeparator);
|
||||
Inc(i);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
Inc(i);
|
||||
@@ -427,6 +438,8 @@ begin
|
||||
end;
|
||||
|
||||
{
|
||||
Arcs are always counter-clockwise in DXF
|
||||
|
||||
100 Subclass marker (AcDbCircle)
|
||||
39 Thickness (optional; default = 0)
|
||||
10 Center point (in OCS) DXF: X value; APP: 3D point
|
||||
@@ -633,29 +646,34 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
// Now make sure that we actually have the right positions
|
||||
if BaseRight.X < BaseLeft.X then
|
||||
begin
|
||||
TmpPoint := BaseRight;
|
||||
BaseRight := BaseLeft;
|
||||
BaseLeft := TmpPoint;
|
||||
end;
|
||||
|
||||
// Considering the the Base and the Dimension position must form a parallelogram
|
||||
// we can solve the other dimention point through the midpoint formula
|
||||
// which means that in a paralelogram A, B, C, D, with A and D opposites
|
||||
// midpoint(AD)=midpoint(BC)
|
||||
// in our case: A=BaseLeft B=DimLeft C=BaseRight D=DimRIght
|
||||
// midpoint(AD)x=(Ax+Dx)/2
|
||||
DimensionLeft.X := BaseLeft.X - BaseRight.X + DimensionRight.X;
|
||||
DimensionLeft.Y := BaseLeft.Y - BaseRight.Y + DimensionRight.Y;
|
||||
|
||||
// And now write it
|
||||
{$ifdef FPVECTORIALDEBUG}
|
||||
// WriteLn(Format('Adding Line from %f,%f to %f,%f', [LineStartX, LineStartY, LineEndX, LineEndY]));
|
||||
{$endif}
|
||||
if IsAlignedDimension then
|
||||
begin
|
||||
// Now make sure that we actually have the right positions
|
||||
if BaseRight.X < BaseLeft.X then
|
||||
begin
|
||||
TmpPoint := BaseRight;
|
||||
BaseRight := BaseLeft;
|
||||
BaseLeft := TmpPoint;
|
||||
end;
|
||||
|
||||
// Now check if we are a horizontal or vertical dimension
|
||||
|
||||
// horizontal
|
||||
if DimensionRight.Y = BaseRight.Y then
|
||||
begin
|
||||
DimensionLeft.X := BaseLeft.X;
|
||||
DimensionLeft.Y := DimensionRight.Y;
|
||||
end
|
||||
else
|
||||
begin
|
||||
DimensionLeft.Y := BaseLeft.Y;
|
||||
DimensionLeft.X := DimensionRight.X;
|
||||
end;
|
||||
|
||||
AData.AddAlignedDimension(BaseLeft, BaseRight, DimensionLeft, DimensionRight);
|
||||
end;
|
||||
end;
|
||||
|
@@ -125,7 +125,8 @@ var
|
||||
CurCircle: TvCircle;
|
||||
CurEllipse: TvEllipse;
|
||||
CurArc: TvCircularArc;
|
||||
FinalStartAngle, FinalEndAngle: double;
|
||||
FinalStartAngle, FinalEndAngle, tmpAngle: double;
|
||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom: Word;
|
||||
CurDim: TvAlignedDimension;
|
||||
begin
|
||||
{$ifdef FPVECTORIALDEBUG}
|
||||
@@ -134,6 +135,7 @@ begin
|
||||
|
||||
PosX := 0;
|
||||
PosY := 0;
|
||||
ADest.Brush.Style := bsClear;
|
||||
|
||||
ADest.MoveTo(ADestX, ADestY);
|
||||
|
||||
@@ -151,17 +153,11 @@ begin
|
||||
case CurSegment.SegmentType of
|
||||
stMoveTo:
|
||||
begin
|
||||
ADest.MoveTo(
|
||||
Round(ADestX + AMulX * Cur2DSegment.X),
|
||||
Round(ADestY + AMulY * Cur2DSegment.Y)
|
||||
);
|
||||
ADest.MoveTo(CoordToCanvasX(Cur2DSegment.X), CoordToCanvasY(Cur2DSegment.Y));
|
||||
end;
|
||||
st2DLine, st3DLine:
|
||||
begin
|
||||
ADest.LineTo(
|
||||
Round(ADestX + AMulX * Cur2DSegment.X),
|
||||
Round(ADestY + AMulY * Cur2DSegment.Y)
|
||||
);
|
||||
ADest.LineTo(CoordToCanvasX(Cur2DSegment.X), CoordToCanvasY(Cur2DSegment.Y));
|
||||
end;
|
||||
{ To draw a bezier we need to divide the interval in parts and make
|
||||
lines between this parts }
|
||||
@@ -177,9 +173,7 @@ begin
|
||||
t := k / CurveLength;
|
||||
CurX := Round(sqr(1 - t) * (1 - t) * PosX + 3 * t * sqr(1 - t) * Cur2DBSegment.X2 + 3 * t * t * (1 - t) * Cur2DBSegment.X3 + t * t * t * Cur2DBSegment.X);
|
||||
CurY := Round(sqr(1 - t) * (1 - t) * PosY + 3 * t * sqr(1 - t) * Cur2DBSegment.Y2 + 3 * t * t * (1 - t) * Cur2DBSegment.Y3 + t * t * t * Cur2DBSegment.Y);
|
||||
ADest.LineTo(
|
||||
Round(ADestX + AMulX * CurX),
|
||||
Round(ADestY + AMulY * CurY));
|
||||
ADest.LineTo(CoordToCanvasX(CurX), CoordToCanvasY(CurY));
|
||||
end;
|
||||
PosX := Round(Cur2DBSegment.X);
|
||||
PosY := Round(Cur2DBSegment.Y);
|
||||
@@ -196,10 +190,10 @@ begin
|
||||
begin
|
||||
CurCircle := CurEntity as TvCircle;
|
||||
ADest.Ellipse(
|
||||
Round(ADestX + AmulX * (CurCircle.CenterX - CurCircle.Radius)),
|
||||
Round(ADestY + AMulY * (CurCircle.CenterY - CurCircle.Radius)),
|
||||
Round(ADestX + AmulX * (CurCircle.CenterX + CurCircle.Radius)),
|
||||
Round(ADestY + AMulY * (CurCircle.CenterY + CurCircle.Radius))
|
||||
CoordToCanvasX(CurCircle.CenterX - CurCircle.Radius),
|
||||
CoordToCanvasY(CurCircle.CenterY - CurCircle.Radius),
|
||||
CoordToCanvasX(CurCircle.CenterX + CurCircle.Radius),
|
||||
CoordToCanvasY(CurCircle.CenterY + CurCircle.Radius)
|
||||
);
|
||||
end
|
||||
else if CurEntity is TvEllipse then
|
||||
@@ -217,22 +211,32 @@ begin
|
||||
begin
|
||||
FinalStartAngle := CurArc.StartAngle;
|
||||
FinalEndAngle := CurArc.EndAngle;
|
||||
BoundsLeft := CoordToCanvasX(CurArc.CenterX - CurArc.Radius);
|
||||
BoundsTop := CoordToCanvasY(CurArc.CenterY - CurArc.Radius);
|
||||
BoundsRight := CoordToCanvasY(CurArc.CenterX + CurArc.Radius);
|
||||
BoundsBottom := CoordToCanvasY(CurArc.CenterY + CurArc.Radius);
|
||||
end
|
||||
else // AMulY is negative
|
||||
begin
|
||||
// Inverting the angles generates the correct result for Y axis inversion
|
||||
FinalStartAngle := 360 - 1* CurArc.EndAngle;
|
||||
FinalEndAngle := 360 - 1* CurArc.StartAngle;
|
||||
BoundsLeft := CoordToCanvasX(CurArc.CenterX - CurArc.Radius);
|
||||
BoundsTop := CoordToCanvasY(CurArc.CenterY + CurArc.Radius);
|
||||
BoundsRight := CoordToCanvasY(CurArc.CenterX + CurArc.Radius);
|
||||
BoundsBottom := CoordToCanvasY(CurArc.CenterY - CurArc.Radius);
|
||||
end;
|
||||
// Arc(ALeft, ATop, ARight, ABottom, Angle16Deg, Angle16DegLength: Integer);
|
||||
ADest.Arc(
|
||||
Round(ADestX + AmulX * (CurArc.CenterX - CurArc.Radius)),
|
||||
Round(ADestY + AmulY * (CurArc.CenterY - CurArc.Radius)),
|
||||
Round(ADestX + AmulX * (CurArc.CenterX + CurArc.Radius)),
|
||||
Round(ADestY + AmulY * (CurArc.CenterY + CurArc.Radius)),
|
||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom,
|
||||
Round(16*FinalStartAngle),
|
||||
Round(16*(FinalEndAngle - FinalStartAngle))
|
||||
Abs(Round(16*(FinalEndAngle - FinalStartAngle)))
|
||||
);
|
||||
// Debug info
|
||||
{ ADest.TextOut(CoordToCanvasX(CurArc.CenterX), CoordToCanvasY(CurArc.CenterY),
|
||||
Format('R=%d', [Round(CurArc.Radius)]));
|
||||
ADest.Rectangle(
|
||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom);}
|
||||
{$endif}
|
||||
end
|
||||
else if CurEntity is TvAlignedDimension then
|
||||
@@ -241,12 +245,12 @@ begin
|
||||
{ ADest.MoveTo(CoordToCanvasX(CurDim.BaseRight.X), CoordToCanvasY(CurDim.BaseRight.Y));
|
||||
ADest.LineTo(CoordToCanvasX(CurDim.DimensionRight.X), CoordToCanvasY(CurDim.DimensionRight.Y));
|
||||
ADest.LineTo(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y));
|
||||
ADest.LineTo(CoordToCanvasX(CurDim.BaseLeft.X), CoordToCanvasY(CurDim.BaseLeft.Y));}
|
||||
ADest.LineTo(CoordToCanvasX(CurDim.BaseLeft.X), CoordToCanvasY(CurDim.BaseLeft.Y));
|
||||
// Debug info
|
||||
// ADest.TextOut(CoordToCanvasX(CurDim.BaseRight.X), CoordToCanvasY(CurDim.BaseRight.Y), 'BR');
|
||||
// ADest.TextOut(CoordToCanvasX(CurDim.DimensionRight.X), CoordToCanvasY(CurDim.DimensionRight.Y), 'DR');
|
||||
// ADest.TextOut(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y), 'DL');
|
||||
// ADest.TextOut(CoordToCanvasX(CurDim.BaseLeft.X), CoordToCanvasY(CurDim.BaseLeft.Y), 'BL');
|
||||
ADest.TextOut(CoordToCanvasX(CurDim.BaseRight.X), CoordToCanvasY(CurDim.BaseRight.Y), 'BR');
|
||||
ADest.TextOut(CoordToCanvasX(CurDim.DimensionRight.X), CoordToCanvasY(CurDim.DimensionRight.Y), 'DR');
|
||||
ADest.TextOut(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y), 'DL');
|
||||
ADest.TextOut(CoordToCanvasX(CurDim.BaseLeft.X), CoordToCanvasY(CurDim.BaseLeft.Y), 'BL');}
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@@ -11,7 +11,7 @@ object frmFPVViewer: TfrmFPVViewer
|
||||
LCLVersion = '0.9.31'
|
||||
object editFileName: TFileNameEdit
|
||||
Left = 8
|
||||
Height = 22
|
||||
Height = 25
|
||||
Top = 8
|
||||
Width = 304
|
||||
DialogOptions = []
|
||||
@@ -33,7 +33,7 @@ object frmFPVViewer: TfrmFPVViewer
|
||||
end
|
||||
object spinScale: TFloatSpinEdit
|
||||
Left = 72
|
||||
Height = 16
|
||||
Height = 25
|
||||
Top = 72
|
||||
Width = 64
|
||||
Increment = 1
|
||||
@@ -44,23 +44,23 @@ object frmFPVViewer: TfrmFPVViewer
|
||||
end
|
||||
object Label1: TLabel
|
||||
Left = 8
|
||||
Height = 17
|
||||
Height = 18
|
||||
Top = 79
|
||||
Width = 56
|
||||
Width = 58
|
||||
Caption = 'Scale by:'
|
||||
ParentColor = False
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 8
|
||||
Height = 17
|
||||
Height = 18
|
||||
Top = 104
|
||||
Width = 73
|
||||
Width = 76
|
||||
Caption = 'Start Pos X:'
|
||||
ParentColor = False
|
||||
end
|
||||
object spinStartX: TSpinEdit
|
||||
Left = 98
|
||||
Height = 16
|
||||
Height = 25
|
||||
Top = 99
|
||||
Width = 46
|
||||
MaxValue = 1000
|
||||
@@ -69,7 +69,7 @@ object frmFPVViewer: TfrmFPVViewer
|
||||
end
|
||||
object spinStartY: TSpinEdit
|
||||
Left = 240
|
||||
Height = 16
|
||||
Height = 25
|
||||
Top = 99
|
||||
Width = 50
|
||||
MaxValue = 1000
|
||||
@@ -78,9 +78,9 @@ object frmFPVViewer: TfrmFPVViewer
|
||||
end
|
||||
object Label3: TLabel
|
||||
Left = 152
|
||||
Height = 17
|
||||
Height = 18
|
||||
Top = 104
|
||||
Width = 72
|
||||
Width = 73
|
||||
Caption = 'Start Pos Y:'
|
||||
ParentColor = False
|
||||
end
|
||||
@@ -109,8 +109,8 @@ object frmFPVViewer: TfrmFPVViewer
|
||||
object pageViewer: TPage
|
||||
end
|
||||
object Page2: TPage
|
||||
ClientWidth = 21504
|
||||
ClientHeight = 20032
|
||||
ClientWidth = 43008
|
||||
ClientHeight = 40064
|
||||
object DXFTreeView: TTreeView
|
||||
Left = 8
|
||||
Height = 313
|
||||
|
@@ -28,10 +28,14 @@
|
||||
<LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="1">
|
||||
<RequiredPackages Count="2">
|
||||
<Item1>
|
||||
<PackageName Value="LCL"/>
|
||||
<PackageName Value="LCLBase"/>
|
||||
<MinVersion Major="1" Release="1" Valid="True"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
</RequiredPackages>
|
||||
<Units Count="4">
|
||||
<Unit0>
|
||||
|
Reference in New Issue
Block a user