@@ -346,9 +346,14 @@ dgcout << " ---> A. " << *loc << endl;
346
346
dgcout << " ---> B. " << coord << endl;
347
347
#endif
348
348
349
- long long int edgeI = IDGG ().maxI () + 1 ;
350
- long long int edgeJ = IDGG ().maxJ () + 1 ;
351
- if (coord.i () > edgeI || coord.j () > edgeJ) { // maybe round-off error?
349
+ long long int maxI = IDGG ().maxI ();
350
+ long long int maxJ = IDGG ().maxJ ();
351
+ long long int edgeI = maxI + 1 ;
352
+ long long int edgeJ = maxJ + 1 ;
353
+ long long int maxOverageI = (IDGG ().aperture () == 7 && IDGG ().isClassI ()) ? edgeI + 1 : edgeI;
354
+ long long int maxOverageJ = (IDGG ().aperture () == 7 && IDGG ().isClassI ()) ? edgeJ + 1 : edgeJ;
355
+
356
+ if (coord.i () > maxOverageI || coord.j () > maxOverageJ) { // maybe round-off error?
352
357
353
358
DgDVec2D tmp (addIn.coord ());
354
359
@@ -366,35 +371,35 @@ dgcout << " ---> C. " << coord << endl;
366
371
#endif
367
372
368
373
if (coord.i () < 0 || coord.j () < 0 ||
369
- coord.i () > edgeI || coord.j () > edgeJ ) {
374
+ coord.i () > maxOverageI || coord.j () > maxOverageJ ) {
370
375
report (" DgQ2DDtoIConverter::convertTypedAddress(): "
371
376
" coordinate out of range: " + (string) coord, DgBase::Fatal);
372
- } else if (coord.i () == edgeI || coord.j () == edgeJ ) {
377
+ } else if (coord.i () > maxI || coord.j () > maxJ ) {
373
378
const DgQuadEdgeCells& ec = IDGG ().edgeTable (quadNum);
374
379
375
380
if (ec.isType0 ()) {
376
- if (coord.j () == edgeJ ) {
381
+ if (coord.j () > maxI ) {
377
382
if (coord.i () == 0 ) {
378
383
quadNum = ec.loneVert ();
379
384
coord = DgIVec2D (0 , 0 );
380
385
} else {
381
386
quadNum = ec.upQuad ();
382
- coord = DgIVec2D (0 , edgeI - coord.i ());
387
+ coord = DgIVec2D ((maxOverageI - edgeI), maxOverageI - coord.i ());
383
388
}
384
389
} else { // i == edgeI
385
390
quadNum = ec.rightQuad ();
386
391
coord.setI (0 );
387
392
}
388
393
} else { // type 1
389
- if (coord.i () == edgeI ) {
394
+ if (coord.i () > maxI ) {
390
395
if (coord.j () == 0 ) {
391
396
quadNum = ec.loneVert ();
392
397
coord = DgIVec2D (0 , 0 );
393
398
} else {
394
399
quadNum = ec.rightQuad ();
395
- coord = DgIVec2D (edgeJ - coord.j (), 0 );
400
+ coord = DgIVec2D (maxOverageJ - coord.j (), (maxOverageJ - edgeJ) );
396
401
}
397
- } else { // j == edgeJ
402
+ } else { // j > maxJ
398
403
quadNum = ec.upQuad ();
399
404
coord.setJ (0 );
400
405
}
0 commit comments