Skip to content

Commit 609d873

Browse files
committed
Fixed USINGZ option when bevel offsetting (Disc. 766).
1 parent cee24f5 commit 609d873

File tree

3 files changed

+54
-8
lines changed

3 files changed

+54
-8
lines changed

CPP/Clipper2Lib/src/clipper.offset.cpp

+12-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/*******************************************************************************
22
* Author : Angus Johnson *
3-
* Date : 21 December 2023 *
3+
* Date : 13 January 2024 *
44
* Website : http://www.angusj.com *
5-
* Copyright : Angus Johnson 2010-2023 *
5+
* Copyright : Angus Johnson 2010-2024 *
66
* Purpose : Path Offset (Inflate/Shrink) *
77
* License : http://www.boost.org/LICENSE_1_0.txt *
88
*******************************************************************************/
@@ -222,13 +222,23 @@ void ClipperOffset::DoBevel(const Path64& path, size_t j, size_t k)
222222
if (j == k)
223223
{
224224
double abs_delta = std::abs(group_delta_);
225+
#ifdef USINGZ
226+
pt1 = PointD(path[j].x - abs_delta * norms[j].x, path[j].y - abs_delta * norms[j].y, path[j].z);
227+
pt2 = PointD(path[j].x + abs_delta * norms[j].x, path[j].y + abs_delta * norms[j].y, path[j].z);
228+
#else
225229
pt1 = PointD(path[j].x - abs_delta * norms[j].x, path[j].y - abs_delta * norms[j].y);
226230
pt2 = PointD(path[j].x + abs_delta * norms[j].x, path[j].y + abs_delta * norms[j].y);
231+
#endif
227232
}
228233
else
229234
{
235+
#ifdef USINGZ
236+
pt1 = PointD(path[j].x + group_delta_ * norms[k].x, path[j].y + group_delta_ * norms[k].y, path[j].z);
237+
pt2 = PointD(path[j].x + group_delta_ * norms[j].x, path[j].y + group_delta_ * norms[j].y, path[j].z);
238+
#else
230239
pt1 = PointD(path[j].x + group_delta_ * norms[k].x, path[j].y + group_delta_ * norms[k].y);
231240
pt2 = PointD(path[j].x + group_delta_ * norms[j].x, path[j].y + group_delta_ * norms[j].y);
241+
#endif
232242
}
233243
path_out.push_back(Point64(pt1));
234244
path_out.push_back(Point64(pt2));

CSharp/Clipper2Lib/Clipper.Offset.cs

+22-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/*******************************************************************************
22
* Author : Angus Johnson *
3-
* Date : 21 December 2023 *
3+
* Date : 13 January 2024 *
44
* Website : http://www.angusj.com *
5-
* Copyright : Angus Johnson 2010-2023 *
5+
* Copyright : Angus Johnson 2010-2024 *
66
* Purpose : Path Offset (Inflate/Shrink) *
77
* License : http://www.boost.org/LICENSE_1_0.txt *
88
*******************************************************************************/
@@ -420,21 +420,39 @@ private void DoBevel(Path64 path, int j, int k)
420420
if (j == k)
421421
{
422422
double absDelta = Math.Abs(_groupDelta);
423+
#if USINGZ
423424
pt1 = new Point64(
424425
path[j].X - absDelta * _normals[j].x,
425-
path[j].Y - absDelta * _normals[j].y);
426+
path[j].Y - absDelta * _normals[j].y, path[j].Z);
426427
pt2 = new Point64(
427428
path[j].X + absDelta * _normals[j].x,
429+
path[j].Y + absDelta * _normals[j].y, path[j].Z);
430+
#else
431+
pt1 = new Point64(
432+
path[j].X - absDelta * _normals[j].x,
433+
path[j].Y - absDelta * _normals[j].y);
434+
pt2 = new Point64(
435+
path[j].X + absDelta * _normals[j].x,
428436
path[j].Y + absDelta * _normals[j].y);
437+
#endif
429438
}
430439
else
431440
{
441+
#if USINGZ
442+
pt1 = new Point64(
443+
path[j].X + _groupDelta * _normals[k].x,
444+
path[j].Y + _groupDelta * _normals[k].y, path[j].Z);
445+
pt2 = new Point64(
446+
path[j].X + _groupDelta * _normals[j].x,
447+
path[j].Y + _groupDelta * _normals[j].y, path[j].Z);
448+
#else
432449
pt1 = new Point64(
433450
path[j].X + _groupDelta * _normals[k].x,
434451
path[j].Y + _groupDelta * _normals[k].y);
435452
pt2 = new Point64(
436-
path[j].X + _groupDelta * _normals[j].x,
453+
path[j].X + _groupDelta * _normals[j].x,
437454
path[j].Y + _groupDelta * _normals[j].y);
455+
#endif
438456
}
439457
pathOut.Add(pt1);
440458
pathOut.Add(pt2);

Delphi/Clipper2Lib/Clipper.Offset.pas

+20-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
(*******************************************************************************
44
* Author : Angus Johnson *
5-
* Date : 21 December 2023 *
5+
* Date : 13 January 2024 *
66
* Website : http://www.angusj.com *
7-
* Copyright : Angus Johnson 2010-2023 *
7+
* Copyright : Angus Johnson 2010-2024 *
88
* Purpose : Path Offset (Inflate/Shrink) *
99
* License : http://www.boost.org/LICENSE_1_0.txt *
1010
*******************************************************************************)
@@ -850,20 +850,38 @@ procedure TClipperOffset.DoBevel(j, k: Integer);
850850
if k = j then
851851
begin
852852
absDelta := abs(fGroupDelta);
853+
{$IFDEF USINGZ}
854+
AddPoint(
855+
fInPath[j].x - absDelta * fNorms[j].x,
856+
fInPath[j].y - absDelta * fNorms[j].y, fInPath[j].z);
857+
AddPoint(
858+
fInPath[j].x + absDelta * fNorms[j].x,
859+
fInPath[j].y + absDelta * fNorms[j].y, fInPath[j].z);
860+
{$ELSE}
853861
AddPoint(
854862
fInPath[j].x - absDelta * fNorms[j].x,
855863
fInPath[j].y - absDelta * fNorms[j].y);
856864
AddPoint(
857865
fInPath[j].x + absDelta * fNorms[j].x,
858866
fInPath[j].y + absDelta * fNorms[j].y);
867+
{$ENDIF}
859868
end else
860869
begin
870+
{$IFDEF USINGZ}
871+
AddPoint(
872+
fInPath[j].x + fGroupDelta * fNorms[k].x,
873+
fInPath[j].y + fGroupDelta * fNorms[k].y, fInPath[j].z);
874+
AddPoint(
875+
fInPath[j].x + fGroupDelta * fNorms[j].x,
876+
fInPath[j].y + fGroupDelta * fNorms[j].y, fInPath[j].z);
877+
{$ELSE}
861878
AddPoint(
862879
fInPath[j].x + fGroupDelta * fNorms[k].x,
863880
fInPath[j].y + fGroupDelta * fNorms[k].y);
864881
AddPoint(
865882
fInPath[j].x + fGroupDelta * fNorms[j].x,
866883
fInPath[j].y + fGroupDelta * fNorms[j].y);
884+
{$ENDIF}
867885
end;
868886
end;
869887
//------------------------------------------------------------------------------

0 commit comments

Comments
 (0)