diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-09-29 23:53:51 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-09-29 23:53:51 +0800 |
| commit | 53d33c1a8e988b73ef13d1c6a253acc0b379fd3a (patch) | |
| tree | 5409282bc8430bc85ae5a00b360fa63f81fbda0f /src/image.rs | |
| parent | 2d4c92814a4a5d425edfe6da36acd75c56e0eb5e (diff) | |
image(draw_direction): take absolute position
Diffstat (limited to 'src/image.rs')
| -rw-r--r-- | src/image.rs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/image.rs b/src/image.rs index db03f31..5981879 100644 --- a/src/image.rs +++ b/src/image.rs @@ -136,11 +136,20 @@ fn draw_process(img: &mut DynamicImage, txt: &str, (curw, curh, c): &mut Offset) fn draw_direction(img: &mut DynamicImage, (_, orih, c): &mut Offset, dst: Option<&NCOffset>) { let srcx = *c as i32; let srcy = *orih as i32; - let (dstx, dsty) = dst.unwrap_or(&(0, DIRECTION_LINE_LENGTH - DIRECTION_LINE_ARROW_OFFSET)); - let dstx = srcx + *dstx as i32; - let dsty = srcy + *dsty as i32; // perpendicular(thickness) + let (dstx, dsty) = match dst { + Some(&(x, y)) => { + let dx = if x == 0 { + srcx + } else { + x as i32 + }; + (dx, y as i32) + } + None => (srcx, srcy + (DIRECTION_LINE_LENGTH - DIRECTION_LINE_ARROW_OFFSET) as i32), + }; + let xdiff = (dstx - srcx) as f32; let ydiff = (dsty - srcy) as f32; let length = (xdiff * xdiff + ydiff * ydiff) @@ -184,7 +193,7 @@ fn draw_direction(img: &mut DynamicImage, (_, orih, c): &mut Offset, dst: Option maxy = p.y; } } - ext(img, &mut (*c, *orih), &mut (maxx.saturating_sub(*c as i32) as u32, maxy.saturating_sub(*orih as i32) as u32)); + ext(img, &mut (*c, *orih), &mut (((maxx - *c as i32).max(0) as u32), ((maxy - *orih as i32).max(0) as u32))); draw_polygon_mut(img, &line, colors::DIRECT); draw_polygon_mut( @@ -215,11 +224,12 @@ fn build(ast: &[DepthExpr]) -> DynamicImage { draw_process(&mut img, "a", &mut offset); draw_direction(&mut img, &mut offset, None); draw_process(&mut img, "a", &mut offset); + let (a, b, c) = offset.clone(); draw_direction(&mut img, &mut offset, None); draw_process(&mut img, "a", &mut offset); draw_direction(&mut img, &mut offset, None); draw_process(&mut img, "a", &mut offset); - draw_direction(&mut img, &mut offset, Some(&(10, 100))); + draw_direction(&mut img, &mut offset, Some(&(a, b))); draw_process(&mut img, "a", &mut offset); img |
