#if !defined(__kinematc_h) // Sentry, use file only if it's not already included.
#define __kinematc_h
/* Project pg
University of Ljubljana
Copyright © 1995 LECAD. All Rights Reserved.
SUBSYSTEM: pg.apx Application
FILE: kinematc.h
AUTHOR: CAD lab
OVERVIEW
========
Class definition for Kinematic (TDialog).
*/
#include <owl\owlpch.h>
#pragma hdrstop
#include <owl\edit.h>
#include <owl\radiobut.h>
#include "pgapp.rh" // Definition of all resources.
//{{TDialog = Kinematic}}
struct KinematicXfer {
//{{KinematicXFER_DATA}}
bool FixCarrier;
bool FixRing;
bool FixSun;
bool InCarrier;
bool InRing;
bool InSun;
char NoPlanets[ 255 ];
bool OutCarrier;
bool OutRing;
bool OutSun;
char TeethRing[ 255 ];
char TeethSun[ 255 ];
//{{KinematicXFER_DATA_END}}
};
enum { SEL_SUN, SEL_RING, SEL_CARRIER };
struct KineData {
int iInput ;
int iOutput ;
int iFixed ;
int iNoPlanets ;
int iTeethRing ;
int iTeethSun ;
int iTeethPlanet ;
} ;
class Kinematic : public TDialog {
public:
Kinematic (TWindow* parent, TResId resId = IDD_KIN_SCHEME, TModule* module = 0);
void GetValues( KineData *data ) ;
void SetValues( KineData data ) ;
virtual ~Kinematic ();
//{{KinematicXFER_DEF}}
protected:
TRadioButton *FixCarrier;
TRadioButton *FixRing;
TRadioButton *FixSun;
TRadioButton *InCarrier;
TRadioButton *InRing;
TRadioButton *InSun;
TEdit *NoPlanets;
TRadioButton *OutCarrier;
TRadioButton *OutRing;
TRadioButton *OutSun;
TEdit *TeethRing;
TEdit *TeethSun;
//{{KinematicXFER_DEF_END}}
//{{KinematicVIRTUAL_BEGIN}}
public:
virtual void SetupWindow ();
virtual bool CanClose ();
//{{KinematicVIRTUAL_END}}
}; //{{Kinematic}}
#endif // __kinematc_h sentry.
/* Project pg
University of Ljubljana
Copyright 1995 LECAD. All Rights Reserved.
SUBSYSTEM: pg.apx Application
FILE: kinematc.cpp
AUTHOR: CAD lab
OVERVIEW
========
Source file for implementation of Kinematic (TDialog).
*/
#include <owl\owlpch.h>
#pragma hdrstop
#include "kinematc.h"
//{{Kinematic Implementation}}
static KinematicXfer KinematicData;
static int iInitDone = 0 ;
Kinematic::Kinematic (TWindow* parent, TResId resId, TModule* module):
TDialog(parent, resId, module)
{
//{{KinematicXFER_USE}}
FixCarrier = new TRadioButton(this, IDC_FIX_CARRIER, 0);
FixRing = new TRadioButton(this, IDC_FIX_RING, 0);
FixSun = new TRadioButton(this, IDC_FIX_SUN, 0);
InCarrier = new TRadioButton(this, IDC_IN_CARRIER, 0);
InRing = new TRadioButton(this, IDC_IN_RING, 0);
InSun = new TRadioButton(this, IDC_IN_SUN, 0);
NoPlanets = new TEdit(this, IDC_NO_PLANETS, 255);
OutCarrier = new TRadioButton(this, IDC_OUT_CARRIER, 0);
OutRing = new TRadioButton(this, IDC_OUT_RING, 0);
OutSun = new TRadioButton(this, IDC_OUT_SUN, 0);
TeethRing = new TEdit(this, IDC_TEETH_RING, 255);
TeethSun = new TEdit(this, IDC_TEETH_SUN, 255);
SetTransferBuffer(&KinematicData);
//{{KinematicXFER_USE_END}}
// INSERT>> Your constructor code here.
}
Kinematic::~Kinematic ()
{
Destroy();
// INSERT>> Your destructor code here.
}
void Kinematic::GetValues( KineData *data )
{
if( KinematicData.InSun ) {
data->iInput = SEL_SUN ;
} else if ( KinematicData.InRing ) {
data->iInput = SEL_RING ;
} else {
data->iInput = SEL_CARRIER ;
}
if( KinematicData.FixSun ) {
data->iFixed = SEL_SUN ;
} else if ( KinematicData.FixRing ) {
data->iFixed = SEL_RING ;
} else {
data->iFixed = SEL_CARRIER ;
}
if( KinematicData.OutSun ) {
data->iOutput = SEL_SUN ;
} else if ( KinematicData.OutRing ) {
data->iOutput = SEL_RING ;
} else {
data->iOutput = SEL_CARRIER ;
}
data->iNoPlanets = atoi(KinematicData.NoPlanets) ;
data->iTeethRing = atoi(KinematicData.TeethRing) ;
data->iTeethSun = atoi(KinematicData.TeethSun) ;
}
void Kinematic::SetValues( KineData data )
{
// set states for radio buttons
KinematicData.InSun = data.iInput == SEL_SUN ;
KinematicData.InRing = data.iInput == SEL_RING ;
KinematicData.InCarrier = data.iInput == SEL_CARRIER ;
KinematicData.FixSun = data.iFixed == SEL_SUN ;
KinematicData.FixRing = data.iFixed == SEL_RING ;
KinematicData.FixCarrier = data.iFixed == SEL_CARRIER ;
KinematicData.OutSun = data.iOutput == SEL_SUN ;
KinematicData.OutRing = data.iOutput == SEL_RING ;
KinematicData.OutCarrier = data.iOutput == SEL_CARRIER ;
// set values for input fields
wsprintf( KinematicData.NoPlanets, "%d", data.iNoPlanets ) ;
wsprintf( KinematicData.TeethRing, "%d", data.iTeethRing ) ;
wsprintf( KinematicData.TeethSun, "%d", data.iTeethSun ) ;
}
void Kinematic::SetupWindow ()
{
TDialog::SetupWindow();
if ( !iInitDone ) {
// do the initialization
InSun->Check() ;
InRing->Uncheck() ;
InCarrier->Uncheck() ;
FixSun->Uncheck() ;
FixRing->Check() ;
FixCarrier->Uncheck() ;
OutSun->Uncheck() ;
OutRing->Uncheck() ;
OutCarrier->Check() ;
NoPlanets->SetText( "3" ) ;
TeethSun->SetText( "21" ) ;
TeethRing->SetText( "108" ) ;
iInitDone = 1 ;
}
}
bool Kinematic::CanClose ()
{
bool result;
int iInput, iFixed, iOutput ;
result = TDialog::CanClose();
// INSERT>> Your code here.
if( InSun->GetCheck() == BF_CHECKED ) {
iInput = SEL_SUN ;
} else if ( InRing->GetCheck() == BF_CHECKED ) {
iInput = SEL_RING ;
} else {
iInput = SEL_CARRIER ;
}
if( FixSun->GetCheck() == BF_CHECKED ) {
iFixed = SEL_SUN ;
} else if ( FixRing->GetCheck() == BF_CHECKED ) {
iFixed = SEL_RING ;
} else {
iFixed = SEL_CARRIER ;
}
if( OutSun->GetCheck() == BF_CHECKED ) {
iOutput = SEL_SUN ;
} else if ( OutRing->GetCheck() == BF_CHECKED ) {
iOutput = SEL_RING ;
} else {
iOutput = SEL_CARRIER ;
}
if( iInput == iOutput || iInput == iFixed || iOutput == iFixed ) {
// display error
MessageBox( "Input, output and fixed gears MUST be different.\r\n"
"Please, correct", "Error in input data" ) ;
result = false ;
} else {
result = true ;
}
return result;
}