Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
6 views1 page

Sample Adjust Bound

The function AdjustBoundByMouse adjusts boundary lines based on mouse input coordinates. It calculates the nearest line segment to the mouse position when the mouse is pressed down and updates the corner points accordingly. The function also checks if the adjusted points are valid before applying the changes to the corner points.

Uploaded by

hridoystudent82
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views1 page

Sample Adjust Bound

The function AdjustBoundByMouse adjusts boundary lines based on mouse input coordinates. It calculates the nearest line segment to the mouse position when the mouse is pressed down and updates the corner points accordingly. The function also checks if the adjusted points are valid before applying the changes to the corner points.

Uploaded by

hridoystudent82
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 1

void AdjustBoundByMouse( int X, int Y, int state = 0 ) // state: 0 move, 1 down

{
static Point32i ptAdjustLine1, ptAdjustLine2, pt3, pt4, ptControl,
ptAdjustLineOut1, ptAdjustLineOut2;
static int index = 0;
int points[ 8 ];
int indexArray[4][8] = { {0,1,2,3,4,5,6,7}, {2,3,4,5,6,7,0,1},
{4,5,6,7,0,1,2,3}, {6,7,0,1,2,3,4,5} };

// calculate x and y on picture


int x = (int)((X - g_OffsetX) / g_scaleX + 0.5);
int y = (int)((Y - g_OffsetY) / g_scaleY + 0.5);

if ( state == 1 ) // mouse down, choose the nearest side line to adjust


{
float dist;
float minDist = DistanceLineSegToPoint( g_cornerPoints[ 0 ],
g_cornerPoints[ 1 ], g_cornerPoints[ 2 ], g_cornerPoints[ 3 ], x, y );
index = 0;
dist = DistanceLineSegToPoint( g_cornerPoints[ 2 ], g_cornerPoints[ 3 ],
g_cornerPoints[ 4 ], g_cornerPoints[ 5 ], x, y );
if ( dist < minDist ) { index = 1; minDist = dist; };
dist = DistanceLineSegToPoint( g_cornerPoints[ 4 ], g_cornerPoints[ 5 ],
g_cornerPoints[ 6 ], g_cornerPoints[ 7 ], x, y );
if ( dist < minDist ) { index = 2; minDist = dist; };
dist = DistanceLineSegToPoint( g_cornerPoints[ 6 ], g_cornerPoints[ 7 ],
g_cornerPoints[ 0 ], g_cornerPoints[ 1 ], x, y );
if ( dist < minDist ) { index = 3; minDist = dist; };
ptAdjustLine1.x = g_cornerPoints[ indexArray[ index ][ 0 ] ];
ptAdjustLine1.y = g_cornerPoints[ indexArray[ index ][ 1 ] ];
ptAdjustLine2.x = g_cornerPoints[ indexArray[ index ][ 2 ] ];
ptAdjustLine2.y = g_cornerPoints[ indexArray[ index ][ 3 ] ];
pt3.x = g_cornerPoints[ indexArray[ index ][ 4 ] ];
pt3.y = g_cornerPoints[ indexArray[ index ][ 5 ] ];
pt4.x = g_cornerPoints[ indexArray[ index ][ 6 ] ];
pt4.y = g_cornerPoints[ indexArray[ index ][ 7 ] ];
}
ptControl.x = x;
ptControl.y = y;

if ( AdjustBound( ptAdjustLine1, ptAdjustLine2, pt3, pt4, ptControl,


&ptAdjustLineOut1, &ptAdjustLineOut2, g_linePoints, 20 ) >= 0 )
{
points[ 0 ] = ptAdjustLineOut1.x; points[ 1 ] = ptAdjustLineOut1.y;
points[ 2 ] = ptAdjustLineOut2.x; points[ 3 ] = ptAdjustLineOut2.y;
points[ 4 ] = pt3.x; points[ 5 ] = pt3.y;
points[ 6 ] = pt4.x; points[ 7 ] = pt4.y;
if ( IsValidPoints( points, g_pResultImage->GetWidth(), g_pResultImage-
>GetHeight() ) )
{
g_cornerPoints[ indexArray[ index ][ 0 ] ] = ptAdjustLineOut1.x;
g_cornerPoints[ indexArray[ index ][ 1 ] ] = ptAdjustLineOut1.y;
g_cornerPoints[ indexArray[ index ][ 2 ] ] = ptAdjustLineOut2.x;
g_cornerPoints[ indexArray[ index ][ 3 ] ] = ptAdjustLineOut2.y;
}
}
}

You might also like