1. height = 1;
  2. width = 1;
  3. DeleteSmallLine[exp_, minLength_] := Module[{lines = exp, len, min, pos, p1, p2, rlz, sides, result},
  4. lines = lines /. Line[a_List] :> Line@Sort@a // Union;
  5. len = lines /. Line[{a_, b_}] :> Norm[b-a];
  6. min = Min@len; pos = Position[len, min];
  7. If[min > minLength,
  8. exp
  9. ,
  10. {p1, p2} = First@First@Extract[lines, pos];
  11. sides = N@{{0,0}, {0, height}, {width, 0}, {width, height}};
  12. rlz = Which[
  13. MemberQ[sides, p1], {p2 -> p1},
  14. MemberQ[sides, p2], {p1 -> p2},
  15. p1[[1]] == 0 \[Or] p1[[1]] == width \[Or] p1[[2]] == 0 \[Or] p1[[2]] == height , {p2 -> p1},
  16. p2[[1]] == 0 \[Or] p2[[1]] == width \[Or] p2[[2]] == 0 \[Or] p2[[2]] == height, {p1 -> p2},
  17. True, {p1 -> Mean[{p1, p2}], p2 -> Mean[{p1, p2}]}
  18. ];
  19. result = exp /. rlz /. Line[a_List] :> Line@Sort@a // Union;
  20. result = DeleteCases[result, Line[{a_, a_}]]
  21. ]
  22. ]
  23. DeleteSmallLines[exp_, minLength_] := FixedPoint[DeleteSmallLine[#, minLength] &, exp, SameTest -> (#1 == #2 &)]