// The core code that implements the algorithm of resizing, rescaling and

// restyling a dendrogram or tree diagram:

DH = UP? J - PH : I - PW; //DH is zero initially in conditional statement

// if UP is true by ?-checking, starting vertical coordinate of tree drawing

// if UP is false, starting horizontal coordinate of tree drawing

if (HC.Mode == 1) {

// Horizontal/vertical auto-resizing is realized by positive/negative Tot

Tot += DH;

} else {

// Handle horizontal drawing width

if (DH * HR < 0) {

CK = 1; // To the reverse direction of resizing

} else {

CK = 0; // To the same direction of resizing

}

K = HR; // Store HR value before being changed

// Get remainder pixels after assigning pixels to clustering levels

HR = DH % CL;

if (HR == 0) CK = 0; // No resizing as DH = 0

DH /= CL; // Get DH that is signed multiple of CL

UW += DH; // Increase/decrease the unit width of tree

if (Tot == 0) {

Tot = Math.abs(HR); // Initialize Tot with HR

} else {

if (CK == 0) {

Tot += Math.abs(HR); //Increment Tot by HR

} else {

Tot -= Math.abs(HR); //Offset Tot by reverse HR

if (Tot > 0) {

HR = -HR; //Reverse direction of resizing

} else if (Tot < 0) {

Tot = -Tot; //Make Tot positive

}

}

}

if (Tot >= CL) {

Tot -= CL; //Subtract CL from Tot if Tot grows over it

//Then each of clustering levels should decrement or increment one pixel,

// that is, decrease or increase the unit width of tree drawing

if (HR < 0) {

UW--; // Decrement the unit width, shrinking tree.

} else if (HR > 0) {

UW++; // Increment the unit width, enlarging tree.

}

}

if (HR == 0) HR = K; // If no resizing, restore HR value

}

// Handle vertical drawing height, which is analogous to the horizontal way.

DH = UP? I - PW : J - PH; // DH is evaluated by ?-checking UP value

if (DH * VR < 0) { // Vertical remainder pixels instead of HR

CK = 1;

} else {

CK = 0;

}

K = VR; // Store VR value before being changed

// Get remainder pixels after assigning pixels to clustering lines

VR = DH % CN; // Number of data points instead of CL

if (VR == 0) CK = 0;

DH /= CN; // Get DH that is the signed multiple of CN

LSP -= DH;

if (Sum == 0) { //Sum instead of Tot

Sum = Math.abs(VR);

} else {

if (CK == 0) {

Sum += Math.abs(VR);

} else {

Sum -= Math.abs(VR);

if (Sum > 0) {

VR = -VR;

} else if (Sum < 0) {

Sum = -Sum;

}

}

}

if (Sum >= CN) {

Sum -= CN;

if (VR < 0) {

LSP++;

} else if (VR > 0) {

LSP--;

}

}

if (VR == 0) VR = K; // If no resizing, restore VR value.