backport changes from c++ for datamatrix

This commit is contained in:
Henry Schimke
2023-01-28 17:04:17 -06:00
parent 5637c26fb6
commit 0107d35b1b
4 changed files with 35 additions and 10 deletions

View File

@@ -139,16 +139,18 @@ pub trait BitMatrixCursor {
ret
}
fn countEdges(&mut self, range: Option<i32>) -> i32 {
let mut range = if let Some(r) = range { r } else { 0 };
fn countEdges(&mut self, range: i32) -> i32 {
let mut res = 0;
let mut range = range;
let mut steps = self.stepToEdge(Some(1), Some(range), None);
let mut steps;
while steps > 0 {
while {
steps = if range == 0 { 0 } else {self.stepToEdge(Some(1), Some(range), None)};
steps > 0
} {
range -= steps;
res += 1;
steps = self.stepToEdge(Some(1), Some(range), None);
}
res

View File

@@ -326,6 +326,10 @@ impl<'a> EdgeTracer<'_> {
return Ok(false);
}
// re-evaluate line with all the points up to here before projecting
if (!line.evaluate_max_distance(Some(1.5), None))
{return Ok(false);}
let mut np = line.project(&self.p);
// make sure we are making progress even when back-projecting:
// consider a 90deg corner, rotated 45deg. we step away perpendicular from the line and get