code cleaning, and some minor bugs solved
This commit is contained in:
parent
07a39a0397
commit
3c97a45f48
|
@ -862,18 +862,16 @@ static void WriteGENERICListOfNets( FILE* f, ObjetNetListStruct* ObjNet )
|
|||
NetcodeName += wxT( "\"" );
|
||||
if( !NetName.IsEmpty() )
|
||||
{
|
||||
NetcodeName += NetName;
|
||||
if( g_TabObjNet[jj].m_Type != NET_PINLABEL )
|
||||
{
|
||||
// usual net name, add in the sheet path
|
||||
NetcodeName = g_TabObjNet[jj].m_SheetList.PathHumanReadable()
|
||||
+ NetcodeName;
|
||||
|
||||
//NetcodeName << wxT("_") <<
|
||||
// g_TabObjNet[jj].m_SheetList.PathHumanReadable();
|
||||
// usual net name, prefix it by the sheet path
|
||||
NetcodeName += g_TabObjNet[jj].m_SheetList.PathHumanReadable();
|
||||
}
|
||||
NetcodeName += NetName;
|
||||
}
|
||||
NetcodeName += wxT( "\"" );
|
||||
// Add the netname without prefix, in cases we need only the "short" netname
|
||||
NetcodeName += wxT( " \"" ) + NetName + wxT( "\"" );
|
||||
LastNetCode = NetCode;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,14 +11,6 @@
|
|||
#define CONV_FROM_UTF8( utf8string ) (utf8string)
|
||||
#endif
|
||||
|
||||
/* violation of C++ standard, cannot use min() and max(), i.e. in lowercase
|
||||
#ifndef min
|
||||
#define min(x, y) ((x) > (y) ? (y) : (x))
|
||||
#endif
|
||||
#ifndef max
|
||||
#define max(x, y) ((x) > (y) ? (x) : (y))
|
||||
#endif
|
||||
*/
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN( x, y ) ( (x) > (y) ? (y) : (x) )
|
||||
|
|
2
libs.win
2
libs.win
|
@ -62,7 +62,7 @@ SYSWXLIB = `$(WXWIN)/wx-config --libs gl`\
|
|||
CC = gcc
|
||||
|
||||
.cpp.o:
|
||||
gcc -c -Wall $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) $(EXTRACPPFLAGS) -o $@ $*.cpp
|
||||
g++ -c -Wall $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) $(EXTRACPPFLAGS) -o $@ $*.cpp
|
||||
|
||||
# Settings for Cyginw/Mingw32
|
||||
# Some versions of windres cannot cope with the --preprocessor
|
||||
|
|
|
@ -65,8 +65,8 @@ public:
|
|||
|
||||
int m_physical_connexion; // variable used in rastnest computations
|
||||
// handle block number in track connection
|
||||
|
||||
int m_zone_connexion; // variable used in rastnest computations
|
||||
protected:
|
||||
int m_ZoneSubnet; // variable used in rastnest computations
|
||||
// handle block number in zone connection
|
||||
|
||||
public:
|
||||
|
@ -131,6 +131,12 @@ public:
|
|||
int GetNet() const { return m_NetCode; }
|
||||
void SetNet( int aNetCode ) { m_NetCode = aNetCode; }
|
||||
|
||||
/**
|
||||
* Function GetZoneSubNet
|
||||
* @return int - the sub net code in zone connections.
|
||||
*/
|
||||
int GetZoneSubNet() const { return m_ZoneSubnet; }
|
||||
void SetZoneSubNet( int aSubNetCode ) { m_ZoneSubnet = aSubNetCode; }
|
||||
|
||||
/**
|
||||
* Function Display_Infos
|
||||
|
|
|
@ -66,6 +66,7 @@ TRACK::TRACK( BOARD_ITEM* StructFather, KICAD_T idtype ) :
|
|||
start = end = NULL;
|
||||
SetNet( 0 );
|
||||
SetSubNet( 0 );
|
||||
SetZoneSubNet( 0 );
|
||||
SetDrillDefault();
|
||||
m_Param = 0;
|
||||
}
|
||||
|
|
|
@ -36,8 +36,10 @@ public:
|
|||
|
||||
protected:
|
||||
int m_NetCode; // Net number
|
||||
int m_Sous_Netcode; /* In rastnest routines : for the current net,
|
||||
int m_Subnet; /* In rastnest routines : for the current net,
|
||||
* block number (number common to the current connected items found) */
|
||||
int m_ZoneSubnet; // variable used in rastnest computations : for the current net,
|
||||
// handle block number in zone connection
|
||||
|
||||
TRACK( const TRACK& track ); // protected so Copy() is used instead.
|
||||
|
||||
|
@ -127,9 +129,15 @@ public:
|
|||
* Function GetSubNet
|
||||
* @return int - the sub net code.
|
||||
*/
|
||||
int GetSubNet() const { return m_Sous_Netcode; }
|
||||
void SetSubNet( int aSubNetCode ) { m_Sous_Netcode = aSubNetCode; }
|
||||
int GetSubNet() const { return m_Subnet; }
|
||||
void SetSubNet( int aSubNetCode ) { m_Subnet = aSubNetCode; }
|
||||
|
||||
/**
|
||||
* Function GetZoneSubNet
|
||||
* @return int - the sub net code in zone connections.
|
||||
*/
|
||||
int GetZoneSubNet() const { return m_ZoneSubnet; }
|
||||
void SetZoneSubNet( int aSubNetCode ) { m_ZoneSubnet = aSubNetCode; }
|
||||
|
||||
/**
|
||||
* Function GetLength
|
||||
|
|
|
@ -44,6 +44,7 @@ public:
|
|||
|
||||
private:
|
||||
int m_NetCode; // Net number for fast comparisons
|
||||
int m_ZoneSubnet; // variable used in rastnest computations:handle block number in zone connection calculations
|
||||
|
||||
public:
|
||||
ZONE_CONTAINER( BOARD* parent );
|
||||
|
@ -130,6 +131,13 @@ public:
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function GetZoneSubNet
|
||||
* @return int - the sub net code in zone connections.
|
||||
*/
|
||||
int GetZoneSubNet() const { return m_ZoneSubnet; }
|
||||
void SetZoneSubNet( int aSubNetCode ) { m_ZoneSubnet = aSubNetCode; }
|
||||
|
||||
int GetNet( void ) const
|
||||
{
|
||||
return m_NetCode;
|
||||
|
|
|
@ -30,7 +30,7 @@ static int change_equipot( TRACK* pt_start_conn, TRACK* pt_end_conn,
|
|||
* Used by propage_equipot()
|
||||
* Change a subnet value to a new value, for tracks ans pads which are connected to corresponding track
|
||||
* for pads, this is the .m_physical_connexion member which is tested and modified
|
||||
* for tracks, this is the .m_Sous_Netcode member which is tested and modified
|
||||
* for tracks, this is the .m_Subnet member which is tested and modified
|
||||
* these members are block numbers (or cluster numbers) for a given net
|
||||
* @return modification count
|
||||
* @param old_val = subnet value to modify
|
||||
|
@ -93,7 +93,7 @@ static void propage_equipot( TRACK* pt_start_conn, TRACK* pt_end_conn )
|
|||
* the track list must be sorted by nets, and all segments from pt_start_conn to pt_end_conn have the save net
|
||||
* When 2 items are connected (a track to a pad, or a track to an other track) they are grouped in a cluster.
|
||||
* for pads, this is the .m_physical_connexion member which is a cluster identifier
|
||||
* for tracks, this is the .m_Sous_Netcode member which is a cluster identifier
|
||||
* for tracks, this is the .m_Subnet member which is a cluster identifier
|
||||
* For a given net, if all tracks are created, there is only one cluster.
|
||||
* but if not all tracks are created, there are are more than one cluster, and some ratsnets will be shown.
|
||||
* @param pt_start_conn = first track to test
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/****************************************************/
|
||||
/* class_module.cpp : fonctions de la classe MODULE */
|
||||
/****************************************************/
|
||||
/**********************************************************************/
|
||||
/* Import functions to import footprints from a gpcb (Newlib) library */
|
||||
/**********************************************************************/
|
||||
|
||||
#include "fctsys.h"
|
||||
|
||||
|
@ -227,7 +227,7 @@ bool MODULE::Read_GPCB_Descr( const wxString& CmpFullFileName )
|
|||
// Calculate size: default is 40 mils (400 pcb units)
|
||||
// real size is: default * ibuf[5] / 100 (size in gpcb is given in percent of defalut size
|
||||
ibuf[5] *= TEXT_DEFAULT_SIZE; ibuf[5] /= 100;
|
||||
m_Reference->m_Size.x = m_Reference->m_Size.y = max( 20, ibuf[5] );
|
||||
m_Reference->m_Size.x = m_Reference->m_Size.y = MAX( 20, ibuf[5] );
|
||||
m_Reference->m_Width = m_Reference->m_Size.x / 10;
|
||||
m_Value->m_Orient = m_Reference->m_Orient;
|
||||
m_Value->m_Size = m_Reference->m_Size;
|
||||
|
|
|
@ -42,8 +42,11 @@ void WinEDA_BasePcbFrame::Genere_GERBER( const wxString& FullFileName, int Layer
|
|||
bool PlotOriginIsAuxAxis )
|
||||
/********************************************************************************/
|
||||
|
||||
/* Genere les divers fichiers de trace:
|
||||
* Pour chaque couche 1 fichier xxxc.PHO au format RS274X
|
||||
/* Creates the output files, one per board layer:
|
||||
* filenames are like xxxc.PHO and use the RS274X format
|
||||
* Units = inches
|
||||
* format 3.4, Leading zero omitted, Abs format
|
||||
* format 3.4 uses the native pcbnew units (1/10000 inch).
|
||||
*/
|
||||
{
|
||||
int tracevia = 1;
|
||||
|
@ -142,7 +145,8 @@ void WinEDA_BasePcbFrame::Plot_Layer_GERBER( FILE* File, int masque_layer,
|
|||
int garde, int tracevia )
|
||||
/***********************************************************************/
|
||||
|
||||
/* Trace en format GERBER. d'une couche cuivre ou masque
|
||||
/* Creates one GERBER file for a copper layer or a technical layer
|
||||
* the silkscreen layers are plotted by Plot_Serigraphie() because they have special features
|
||||
*/
|
||||
{
|
||||
wxPoint pos;
|
||||
|
@ -156,7 +160,7 @@ void WinEDA_BasePcbFrame::Plot_Layer_GERBER( FILE* File, int masque_layer,
|
|||
// (Following command has been superceded by new command on lines 93 and 94.)
|
||||
// masque_layer |= EDGE_LAYER; /* Les elements de la couche EDGE sont tj traces */
|
||||
|
||||
/* trace des elements type Drawings Pcb : */
|
||||
/* Draw items type Drawings Pcb : */
|
||||
PtStruct = m_Pcb->m_Drawings;
|
||||
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
|
||||
{
|
||||
|
@ -191,7 +195,7 @@ void WinEDA_BasePcbFrame::Plot_Layer_GERBER( FILE* File, int masque_layer,
|
|||
}
|
||||
}
|
||||
|
||||
/* Trace des Elements des modules autres que pads */
|
||||
/* Draw footprints shapes without pads (pads will plotted later) */
|
||||
nb_items = 0;
|
||||
Affiche_1_Parametre( this, 38, wxT( "DrawMod" ), wxEmptyString, GREEN );
|
||||
Module = m_Pcb->m_Modules;
|
||||
|
@ -213,7 +217,7 @@ void WinEDA_BasePcbFrame::Plot_Layer_GERBER( FILE* File, int masque_layer,
|
|||
}
|
||||
}
|
||||
|
||||
/* Trace des Elements des modules : Pastilles */
|
||||
/* Plot footprint pads */
|
||||
nb_items = 0;
|
||||
Affiche_1_Parametre( this, 48, wxT( "Pads" ), wxEmptyString, GREEN );
|
||||
Module = m_Pcb->m_Modules;
|
||||
|
@ -271,7 +275,7 @@ void WinEDA_BasePcbFrame::Plot_Layer_GERBER( FILE* File, int masque_layer,
|
|||
}
|
||||
}
|
||||
|
||||
/* trace des VIAS : */
|
||||
/* Plot vias : */
|
||||
if( tracevia )
|
||||
{
|
||||
nb_items = 0;
|
||||
|
@ -304,7 +308,7 @@ void WinEDA_BasePcbFrame::Plot_Layer_GERBER( FILE* File, int masque_layer,
|
|||
Affiche_1_Parametre( this, 56, wxEmptyString, msg, RED );
|
||||
}
|
||||
}
|
||||
/* trace des pistes : */
|
||||
/* Plot tracks (not vias) : */
|
||||
nb_items = 0;
|
||||
Affiche_1_Parametre( this, 64, wxT( "Tracks" ), wxEmptyString, YELLOW );
|
||||
|
||||
|
@ -328,7 +332,7 @@ void WinEDA_BasePcbFrame::Plot_Layer_GERBER( FILE* File, int masque_layer,
|
|||
Affiche_1_Parametre( this, 64, wxEmptyString, msg, YELLOW );
|
||||
}
|
||||
|
||||
/* trace des zones: */
|
||||
/* Plot zones: */
|
||||
nb_items = 0;
|
||||
if( m_Pcb->m_Zone )
|
||||
Affiche_1_Parametre( this, 72, wxT( "Zones " ), wxEmptyString, YELLOW );
|
||||
|
@ -452,11 +456,10 @@ void Plot_1_CIRCLE_pad_GERBER( wxPoint pos, int diametre )
|
|||
void PlotRectangularPad_GERBER( wxPoint pos, wxSize size, int orient )
|
||||
/**************************************************************************/
|
||||
|
||||
/* Trace 1 pad rectangulaire d'orientation quelconque
|
||||
/* Plot 1 rectangular pad
|
||||
* donne par son centre, ses dimensions, et son orientation
|
||||
* Pour une orientation verticale ou horizontale, la forme est flashee
|
||||
* Pour une orientation quelconque la forme est tracee par 4 segments
|
||||
* de largeur 1/2 largeur pad
|
||||
* For a vertical or horizontal shape, the shape is an aperture (Dcode) and it is flashed
|
||||
* For others orientations the shape is plotted as a polygon
|
||||
*/
|
||||
{
|
||||
D_CODE* dcode_ptr;
|
||||
|
@ -487,7 +490,7 @@ void PlotRectangularPad_GERBER( wxPoint pos, wxSize size, int orient )
|
|||
fputs( cbuf, dest );
|
||||
break;
|
||||
|
||||
default: /* Forme tracee par remplissage */
|
||||
default: /* plot pad shape as polygon */
|
||||
trace_1_pad_TRAPEZE_GERBER( pos, size, wxSize( 0, 0 ), orient, FILLED );
|
||||
break;
|
||||
}
|
||||
|
@ -587,7 +590,7 @@ void trace_1_pad_TRAPEZE_GERBER( wxPoint pos, wxSize size, wxSize delta,
|
|||
{
|
||||
int ii, jj;
|
||||
int dx, dy;
|
||||
wxPoint polygone[4]; /* coord sommets */
|
||||
wxPoint polygon[4]; /* polygon corners */
|
||||
int coord[8];
|
||||
int ddx, ddy;
|
||||
|
||||
|
@ -600,33 +603,33 @@ void trace_1_pad_TRAPEZE_GERBER( wxPoint pos, wxSize size, wxSize delta,
|
|||
ddx = delta.x / 2;
|
||||
ddy = delta.y / 2;
|
||||
|
||||
polygone[0].x = -dx - ddy;
|
||||
polygone[0].y = +dy + ddx;
|
||||
polygone[1].x = -dx + ddy;
|
||||
polygone[1].y = -dy - ddx;
|
||||
polygone[2].x = +dx - ddy;
|
||||
polygone[2].y = -dy + ddx;
|
||||
polygone[3].x = +dx + ddy;
|
||||
polygone[3].y = +dy - ddx;
|
||||
polygon[0].x = -dx - ddy;
|
||||
polygon[0].y = +dy + ddx;
|
||||
polygon[1].x = -dx + ddy;
|
||||
polygon[1].y = -dy - ddx;
|
||||
polygon[2].x = +dx - ddy;
|
||||
polygon[2].y = -dy + ddx;
|
||||
polygon[3].x = +dx + ddy;
|
||||
polygon[3].y = +dy - ddx;
|
||||
|
||||
/* Dessin du polygone et Remplissage eventuel de l'interieur */
|
||||
|
||||
for( ii = 0, jj = 0; ii < 4; ii++ )
|
||||
{
|
||||
RotatePoint( &polygone[ii].x, &polygone[ii].y, orient );
|
||||
coord[jj] = polygone[ii].x += pos.x;
|
||||
RotatePoint( &polygon[ii].x, &polygon[ii].y, orient );
|
||||
coord[jj] = polygon[ii].x += pos.x;
|
||||
jj++;
|
||||
coord[jj] = polygone[ii].y += pos.y;
|
||||
coord[jj] = polygon[ii].y += pos.y;
|
||||
jj++;
|
||||
}
|
||||
|
||||
if( modetrace != FILLED )
|
||||
{
|
||||
int plotLine_width = (int) (10 * g_PlotLine_Width * Gerb_scale_plot);
|
||||
PlotGERBERLine( polygone[0], polygone[1], plotLine_width );
|
||||
PlotGERBERLine( polygone[1], polygone[2], plotLine_width );
|
||||
PlotGERBERLine( polygone[2], polygone[3], plotLine_width );
|
||||
PlotGERBERLine( polygone[3], polygone[0], plotLine_width );
|
||||
PlotGERBERLine( polygon[0], polygon[1], plotLine_width );
|
||||
PlotGERBERLine( polygon[1], polygon[2], plotLine_width );
|
||||
PlotGERBERLine( polygon[2], polygon[3], plotLine_width );
|
||||
PlotGERBERLine( polygon[3], polygon[0], plotLine_width );
|
||||
}
|
||||
else
|
||||
PlotPolygon_GERBER( 4, coord, TRUE );
|
||||
|
@ -664,7 +667,7 @@ void PlotGERBERLine( wxPoint start, wxPoint end, int width )
|
|||
void PlotCircle_GERBER( wxPoint centre, int rayon, int epaisseur )
|
||||
/********************************************************************/
|
||||
|
||||
/* routine de trace de 1 cercle de centre centre par approximation de segments
|
||||
/* Plot one cercle as segments (6 to 16 depending on its radius
|
||||
*/
|
||||
{
|
||||
int ii;
|
||||
|
@ -702,7 +705,7 @@ void PlotPolygon_GERBER( int nb_segm, int* coord, bool fill )
|
|||
/***************************************************************/
|
||||
{
|
||||
int ii;
|
||||
wxPoint pos;
|
||||
wxPoint pos, startpos;
|
||||
|
||||
fputs( "G36*\n", dest );
|
||||
pos.x = *coord;
|
||||
|
@ -710,6 +713,7 @@ void PlotPolygon_GERBER( int nb_segm, int* coord, bool fill )
|
|||
pos.y = *coord;
|
||||
coord++;
|
||||
UserToDeviceCoordinate( pos );
|
||||
startpos = pos;
|
||||
fprintf( dest, "X%5.5dY%5.5dD02*\n", pos.x, pos.y );
|
||||
for( ii = 1; ii < nb_segm; ii++ )
|
||||
{
|
||||
|
@ -721,6 +725,7 @@ void PlotPolygon_GERBER( int nb_segm, int* coord, bool fill )
|
|||
fprintf( dest, "X%5.5dY%5.5dD01*\n", pos.x, pos.y );
|
||||
}
|
||||
|
||||
fprintf( dest, "X%5.5dY%5.5dD01*\n", startpos.x, startpos.y );
|
||||
fputs( "G37*\n", dest );
|
||||
}
|
||||
|
||||
|
@ -915,9 +920,6 @@ int WinEDA_BasePcbFrame::Gen_D_CODE_File( FILE* penfile )
|
|||
break;
|
||||
}
|
||||
|
||||
// compensation localisation printf (float x.y généré x,y)
|
||||
to_point( text + 2 );
|
||||
|
||||
fputs( cbuf, penfile );
|
||||
ptr_tool = ptr_tool->m_Pnext;
|
||||
nb_dcodes++;
|
||||
|
|
|
@ -344,7 +344,7 @@ int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector<
|
|||
// style is ARC_CW or ARC_CCW
|
||||
int n; // number of steps for arcs
|
||||
n = ( abs( x2 - x1 ) + abs( y2 - y1 ) ) / (CArc::MAX_STEP);
|
||||
n = max( n, CArc::MIN_STEPS ); // or at most 5 degrees of arc
|
||||
n = MAX( n, CArc::MIN_STEPS ); // or at most 5 degrees of arc
|
||||
n_vertices += n;
|
||||
n_arcs++;
|
||||
}
|
||||
|
@ -378,7 +378,7 @@ int CPolyLine::MakeKboolPoly( int aStart_contour, int aEnd_contour, std::vector<
|
|||
// style is arc_cw or arc_ccw
|
||||
int n; // number of steps for arcs
|
||||
n = ( abs( x2 - x1 ) + abs( y2 - y1 ) ) / (CArc::MAX_STEP);
|
||||
n = max( n, CArc::MIN_STEPS ); // or at most 5 degrees of arc
|
||||
n = MAX( n, CArc::MIN_STEPS ); // or at most 5 degrees of arc
|
||||
double xo, yo, theta1, theta2, a, b;
|
||||
a = fabs( (double) (x1 - x2) );
|
||||
b = fabs( (double) (y1 - y2) );
|
||||
|
@ -966,10 +966,10 @@ CRect CPolyLine::GetCornerBounds()
|
|||
r.right = r.top = INT_MIN;
|
||||
for( unsigned i = 0; i<corner.size(); i++ )
|
||||
{
|
||||
r.left = min( r.left, corner[i].x );
|
||||
r.right = max( r.right, corner[i].x );
|
||||
r.bottom = min( r.bottom, corner[i].y );
|
||||
r.top = max( r.top, corner[i].y );
|
||||
r.left = MIN( r.left, corner[i].x );
|
||||
r.right = MAX( r.right, corner[i].x );
|
||||
r.bottom = MIN( r.bottom, corner[i].y );
|
||||
r.top = MAX( r.top, corner[i].y );
|
||||
}
|
||||
|
||||
return r;
|
||||
|
@ -986,10 +986,10 @@ CRect CPolyLine::GetCornerBounds( int icont )
|
|||
int iend = GetContourEnd( icont );
|
||||
for( int i = istart; i<=iend; i++ )
|
||||
{
|
||||
r.left = min( r.left, corner[i].x );
|
||||
r.right = max( r.right, corner[i].x );
|
||||
r.bottom = min( r.bottom, corner[i].y );
|
||||
r.top = max( r.top, corner[i].y );
|
||||
r.left = MIN( r.left, corner[i].x );
|
||||
r.right = MAX( r.right, corner[i].x );
|
||||
r.bottom = MIN( r.bottom, corner[i].y );
|
||||
r.top = MAX( r.top, corner[i].y );
|
||||
}
|
||||
|
||||
return r;
|
||||
|
|
|
@ -46,11 +46,11 @@ void ArmBoolEng( Bool_Engine* aBooleng, bool aConvertHoles = false );
|
|||
#define NM_PER_MIL 10 // 25400
|
||||
|
||||
#define to_int( x ) (int) round( (x) )
|
||||
#ifndef min
|
||||
#define min( x1, x2 ) ( (x1) > (x2) ? (x2) : (x1) )
|
||||
#ifndef MIN
|
||||
#define MIN( x1, x2 ) ( (x1) > (x2) ? (x2) : (x1) )
|
||||
#endif
|
||||
#ifndef max
|
||||
#define max( x1, x2 ) ( (x1) > (x2) ? (x1) : (x2) )
|
||||
#ifndef MAX
|
||||
#define MAX( x1, x2 ) ( (x1) > (x2) ? (x1) : (x2) )
|
||||
#endif
|
||||
|
||||
class CRect
|
||||
|
|
|
@ -38,10 +38,10 @@ public:
|
|||
my_rect(){};
|
||||
my_rect( int xi, int yi, int xf, int yf )
|
||||
{
|
||||
xlo = min(xi,xf);
|
||||
xhi = max(xi,xf);
|
||||
ylo = min(yi,yf);
|
||||
yhi = max(yi,yf);
|
||||
xlo = MIN(xi,xf);
|
||||
xhi = MAX(xi,xf);
|
||||
ylo = MIN(yi,yf);
|
||||
yhi = MAX(yi,yf);
|
||||
};
|
||||
int xlo, ylo, xhi, yhi;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue