Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE INGINERIE
SECIA : AUTOMATIC I INFORMATIC INDUSTRIAL
LUCRARE DE DIPLOM
COORDONATOR TIINIFIC
CONF.DR.ING. VALERIAN HECA
L.DRD.ING. BARNA CORNEL
ABSOLVENT
LAZR MARIUS GHEORGHE
-2004-
COORDONATOR TIINIFIC
CONF.DR.ING. VALERIAN HECA
L.DRD.ING. BARNA CORNEL
ABSOLVENT
LAZR MARIUS GHEORGHE
-2004-
Cuprins
1. Introducere .1
1.1 Stabilirea variantei optime 1
1.2 Stabilirea soluiei constructive ..............................................................................2
5. Comanda cu PC ............................................................................................28
5.1 Portul paralel ........................................................................................................28
5.2. Configuraia portului paralel .............................................................................32
1. Introducere
Proiectul a fost conceput pentru a satisface mai multe facilitai folosite in industrie in
funcie de modificare capului de scriere se poate folosi pentru :
-
pentru gurire daca este folosit o mandrin din medicina (stomatologie) ataat bine
neles i un motora
-1-
dispozitivul de susinere a capului de scriere este mobil i masa pe care este fixat hrtia
este rigid.
O alt dat de intrare a proiectrii, n aceast etap de stabilire a variantei optime a fost
similitudinea cu un echipament periferic consacrat al tehnicii de calcul i anume plotter-ul. Acest
echipament lucreaz de asemenea ntr-un sistem de coordonate OXY, aadar au fost analizate
soluii constructive existente.
-2-
Un alt exemplu n acest sens este plotter-ul realizat de firma Fischer, la care deplasarea capului de
scriere ntr-un punct dorit n foaia de lucru se realizeaz cu transmisie de micare tip urub-piuli.
Analiznd toate aceste informaii i avnd n vedere i tema de proiectare, macheta pentru
scriere care face obiectul prezentului proiect va fi prevzut cu mas rigid pentru fixarea hrtiei iar
capul de scriere va fi mobil. Instalaia de scriere care va fi prezentat i gsete aplicabilitate n
toate cazurile prezentate mai sus.
-4-
2. PROIECTAREA INSTALATIEI
Proiectarea instalaiei automate de scriere materializat prin macheta de scriere parcurge
urmtoarele etape: proiectarea mesei dispozitivului de scriere, proiectarea portalei dipozitivului pe
care se afl fixat capul de scriere i proiectarea mecanismului de acionare al ansamblului.
-5-
-6-
3. Acionarea electric
3.1 Consideraii generale privind motoarele pas cu pas
Motoarele pas cu pas reprezint maini electrice sincrone modificate ale cror
nfurri de comand se alimenteaz cu un sistem m-fazat de impulsuri de tensiune practic
dreptunghiular, rotorul fiind executat fr nfurri auxiliare de pornire. Tensiunea sub
form de impulsuri aplicat fazelor motorului determin o repartizare discret a cmpului
magnetic n ntrefierul mainii i ca urmare, micarea rotorului const din deplasri unghiulare
elementare succesive.
Spre deosebire de motoarele sincrone clasice motoarele pas cu pas intr n sincronism
fr alunecare, iar frnarea se realizeaz fr ieirea din sincronism. Datorit acestui fapt ele
asigur n domeniul de funcionare porniri brute, opriri i reversri fr pierderea informaiei
sau fr omisiuni de pas.
Particularitile funcionale, pentru care sunt destinate motoarele pas cu pas, au
determinat apariia unor tipuri constructive speciale care se deosebesc de mainile sincrone
clasice. Astfel, motoarele pas cu pas se execut cu un diametru rotoric minim i cu un numr
mrit de poli, ceea ce permite obinerea unei valori unghiulare mici a pasului.
nfurrile de comand a motoarelor pas cu pas se pot alimenta n mod separat sau n
grupuri n diferite combinaii. Fiecrei combinaii sau tact de comutaie i corespunde o
orientare spaial determinat a cmpului magnetic rezultant n ntrefierul mainii.
Ca i motoarele sincrone clasice, motoarele pas cu pas se clasific n funcie de
construcia circuitului magnetic i de numrul nfurrilor de comand. Se deosebesc dou
tipuri de baz:
1. Motoare pas cu pas de tip reactiv cu rotorul format numai din jug confecionat din
tole.
2. Motoare pas cu pas de tip activ cu rotor format din jug la care se adaug
electromagnei sau magnei permaneni.
Motoarele pas cu pas de tip reactiv au rotorul executat sub forma unui cilindru
feromagnetic dinat ce poate fi executat cu numr mare de poli. Astfel de motoare se execut
cu un pas pn la un grad, ceea ce este satisfctor pentru micorarea erorii unghiulare
absolute. La o frecven ridicat a impulsurilor de comand (sute de Hz) aceste motoare au
vitez de rotaie sczut i prin urmare pot fi utilizate fr reductor.
-7-
-8-
Stator1
Stator2
Stator3
-9-
-14-
a)
b)
c)
Figura 3.3. Motor pas cu pas reactiv, de tip reductor
a cu circuit magnetic simetric; b cu patru nfurri de comand i circuit magnetlc
nesimetric; c cu opt nfurri de comand i circuit magnetic nesimetric.
n realitate la acest tip de motor se pot cupla simultan i dou nfurri de comand
succesive, ceea ce duce la mrirea cuplului de rotaie. n acest caz fluxul magnetic se nchide
prin polii vecini, iar poziia rotorului pentru care se obine reluctana magnetic minim a
ntrefierului se deplaseaz cu p/2 i coincide cu axa de simetrie a polilor statorici pe care se
gsesc nfurrile alimentate.
Motorul pas cu pas reactiv cu patru nfurri de comand i cu sistem magnetic
nesimetric, n principiu funcioneaz asemntor cu motoarele pas cu pas reactive avnd
circuitul magnetic simetric. Motorul are numai patru poli apareni (fig. 3.3, b) pe care sunt
dispuse cele patru nfurri de comand, fiecare nfurare fiind alctuit dintr-o singur
secie.
Avantajul acestui tip de motor const n faptul c dezvolt un cuplu mai mare pe
-15-
Configuraia pinilor :
Rou
- mas
Rou
- mas
Negru - bobina 1
Portocaliu
- bobina 2
Maro
- bobina 3
-16-
Rou-Rou
X
73,5
71,7
72,7
73,8
Negru
73,5
X
144,8
145,8
146,9
Portocaliu
71,7
144,8
X
144
145
Maro
72,7
145,8
144
X
146
Galben
73,8
146,9
145
146
X
Configuraia pinilor :
Negru - mas
Alb
Verde-alb
Rou-alb
Verde
Rou
- mas
- bobina 1
- bobina 2
- bobina 3
- bobina 4
Negru - Alb
X
5,3
5,2
5,3
5,2
Verde-alb
5,3
X
10,3
10,2
10,2
-17-
Rou-alb
5,2
10,3
X
10,2
10
Verde
5,3
10,2
10,2
X
10,1
Rou
5,2
10,2
10
10,1
X
4. ACIONAREA ELECTRONIC
4.1 Modul de comand pentru motoarele pas cu pas
Schema bloc de comand pentru motoarele pas cu pas este urmtoarea :
-18-
-19-
Astfel, la fiecare impuls de comand, motorul nainteaz un pas ntreg, dar face pasul
ntre dou bobine alturate, deci polii statorului i ai rotorului nu se aliniaz, sunt alimentate
dou bobine n acelai timp.
Pentru a alinia polii, trebuie ca doar o singur bobin s primeasc excitaia la un
moment dat. Schema de comand din figur ndeplinete acest deziderat.
-20-
-21-
-22-
-23-
-24-
Ca alternativ la acest circuit, dar cu logic de funcionare identic propunem montajul de mai
jos pentru comanda n patru faze a motoarelor pas cu pas unipolare.
-25-
Acest montaj poate comanda dou motoare pas cu pas i un releu prin date de
comand digitale provenite de la un calculator. n plus, el poate s detecteze poziiile a dou
microntreruptoare i s furnizeze calculatorului nivelurile logice respective. Toate aceste
proprieti fac din montajul prezentat o interfa ideal pentru utilizarea ca ploter X-Y.
Impuls
Motor 1
Motor 2
De pas
L1
L2
L3
L4
L5
L6
L7
L8
Circuitul integratului IC1 este configurat ca dou latch-uri set-reset (S-R) care
elimin vibraii de contact ale celor dou microntreruptoare S1 i S2 , a cror poziie este
detectat de biii D5 respectiv D6 ai portului de citire al calculatorului. Circuitul de comand
al releului construit cu T1 i componentele aferente, poate comuta n poziiile activ i
respectiv inactiv un cap de desenare comndat prin solenoid sub controlul bitului de port 4.
Comanda motorului este realizat de porile XOR, N5N12, bistabilele FF1FF4 i
circuitul integrat de comand a bobinelor motorului, IC4. Acest ansamblu poate comanda
dou motoare pas cu pas, unipolare, n patru faze, lucrnd la jumtate de pas prin fixarea
direciei de rotire cu ajutorul D1 i D3 i printr-o tranziie logic H-L pe bitul D0 sau D2.
Funciile de comand sunt rezumate n tabel. Circuitul de comand a motorului, IC4, poate
furniza 500 mA pe fiecare faz la o tensiune maxim a motorului de 50 V. ULN 2803 A are
diode interne de protecie mpotriva t.e.m. generate de bobinajul motorului atunci cnd acesta
este dezactivat.
Pentru ca interfaa prezentat aici s poat fi controlat prin calculator, se configureaz
portul I/0 pentru 5 bii de ieire, D0D4 i doi bii de intrare, D5 i D6, i se trimit ctre
montaj semnalele adecvate.
-26-
Acest tip de interfa necesit dou surse de alimentare de 5 V pentru circuitele logice
i comanda releului i 12 V (pozitiv) pentru bobinajele motorului pas cu pas. L1L4
reprezint motorul 1 iar L5L8 motorul 2.
-27-
5.COMANDA CU PC
5.1. Portul paralel
Portul paralel al PC-ului este interesant datorit programrii sale mai simple fa de
portul serial care necesit un protocol de transmisie foarte precis. La origine, rezervat
conexiunii dintre imprimant i calculator, portul paralel este des utilizat actualmente i la alte
aplicaii datorit vitezei sale ridicate de transmisie a informaiei numerice. Se poate conecta la
acest port fie scanerul, fie un cititor pentru discuri de mare capacitate, precum i diferite
instrumente de msur sau cartele electronice diverse.
Fr a pretinde abordarea n totalitate a aspectelor particulare a acestei interfee
prezentm cteva informaii importante.
Portul paralel dispune de urmtoarele linii:
-
8 linii de date
4 linii de control
Pentru conexiunea pe portul paralel sunt utilizai conectorii SUBD25 (tip Canon) i
Centronics. n tabel sunt date numerotarea pinilor pentru aceti conectori, funcia ndeplinit,
sensul de circulaie a informaiei i tipul registrului, iar n figura modul de cablare a unui
conector SUBD25 cu unul tip Centronics utilizat la imprimant.
SUBD25
Tip
Semnificaie
Centronics
Sens
Tip
informaie
linie
STROBE
Ieire(-Intrare)
Control
D0
Ieire(-Intrare)
Date
D1
Ieire(-Intrare)
Date
D2
Ieire(-Intrare)
Date
D3
Ieire(-Intrare)
Date
D4
Ieire(-Intrare)
Date
D5
Ieire(-Intrare)
Date
D6
Ieire(-Intrare)
Date
-28-
D7
Ieire(-Intrare)
Date
10
10
ACKNOWLEDG
Intrare
Statut
E
11
11
BUSY
Intrare
Statut
12
12
PAPER OUT
Intrare
Statut
13
13
SELECT
Intrare
Statut
14
14
AUTO FEED
Intrare
Control
15
32
ERROR
Intrare
Statut
16
31
INITIALIZE
Ieire
Control
17
36
SELECT
Ieire
Control
PRINTER
1825
1930
GND(MAS)
-29-
Tabelul prezentat este de fapt valabil pentru portul paralel de tip compatibil
(unidirecional) i nu bidirecional. Rolul portului paralel a fost la nceput unic, acela de a
transmite datele ctre imprimant, ceea ce justific de ce datele (liniile D0D7) circulau ntrun singur sens, de la PC la imprimant i nu n ambele sensuri. Sunt porturi care permit
ambele sensuri pentru transmisia informaiei.
Exist diferite tipuri de interfee paralele, definite de standardul IEEE1284;
-
Tipul unidirecional pe 4 bii are intrarea de date pe 4 bii, ieirea facndu-se pe 8 bii,
la fel ca la orice port standard. Tipul 1 bidirecional pe 8 bii (tip PS2 bidirecional) conceput
de IBM pentru calculatorul PS2 permite comunicarea acestuia cu perifericele pe 8 linii de date
i are un bit suplimentar rezervat semnalizrii direciei n care se face transportul. Vitezele cu
care se lucreaz sunt ntre 60koctei/s i 300 koctei/s. Tipul bidirecional pe 8 bii (DMA 8
bits-Direct Access Memory 8 bits sau acces direct la memorie pe 8 bii) echipeaz modelele
PS2 IBM tip 57,90 i 95 i prezint o vitez de lucru mult mai mare dect precedentele
datorit accesului direct la memorie.
Tipul EPP realizat n principal de INTEL ofer vitez de transmisie de la 1 Moctet
pn la 2 Moctei per secund. Tipul de port cu capabilitate extins ECP, realizat printre alii
de Microsoft, ofer de asemenea vitez de transmisie ridicat i necesit utilizarea
unui canal DMA. PC-urile actuale sunt configurate n principal cu port paralel n mod EPP
sau Ecp care sunt compatibile cu majoritatea perifericelor existente pe pia. Astfel, liniile de
date D0D7 vor fi de tip Intrare/Ieire. De preferin se seteaz n BIOS (setup) tipul EPP.
n continuare se va prezenta descrierea semnalelor vehiculate pe portul paralel.
/ STROBE: aceast linie, activ pe zero logic, indic faptul c datele sunt prezentate
pe liniile D0D7
D0D7: aceste 8 linii formeaz bus-ul de date prin care sunt vehiculate, sub form
numeric, caracterele imprimantei
/ACK(sau ACKNOWLEDGE): indic dac s-a recepionat bine datele i dac se
poate continua transmisia
-30-
D7
D6
D5
D4
4
D3
D2
D1
D0
La adresa 379h se afl informaia pentru semnalizarea strii imprimantei, primii trei
bii sunt nedefinii, iar ceilali au urmtoarea semnificaie:
-
bit 3: ERROR;
Controlul imprimantei se face cu un registru aflat la adresa 37Ah. Primii 4 bii sunt
imaginea semnalelor STROBE, AUTO FEED, INIT i SELECT IN. Bit-ul 4 autorizeaz sau
nu
declararea unei ntreruperi (IRQ5) atunci cnd ACK este pe 0 logic (care semnific c
imprimanta a validat recepia unui caracter). Dac bit-ul BIT CTRL este pe 0 se pot scrie date
pe portul paralel, iar dac este pe 1, permite lectura datelor.
-
bit 0 :STROBE ;
bit 1 :AUTOFEED;
bit 2:INIT
bit 3: SELECT IN
Portul paralel original IBM-PC are un total de 12 ieiri i 5 intrri digitale, accesate
prin 3 porturi de cte 8 bii, consecutive n spaiul de adresare a procesorului.
- 8 ieiri accesate prin portul DATA (adres de baz) D0 D7
- 5 intrri (una inversat) accesate prin portul STATUS (adres de baz +1) S3 S7
4 ieiri (3 inversate) accesate prin portul CONTROL (adres de baz +2) C0 C3
Conectorul este mam cu 25 de pini, D-Type.
n aplicaia data, pinul 2 (D0) i 3 (D1) s-au folosit pentru direcie i tact pentru
deplasarea pe o axa, pinul 4 (D2) i 5 (D3) s-au folosit pentru direcie i tact pentru deplasarea
pe cealalt axa iar pinul 6 (D4) a fost utilizat pentru controlul peniei. Pinii afereni ieirilor
D5, D6 i D7 nu s-au utilizat.
Ca intrri s-au folosit pinii 13 i 15 ca semnale de la limitatorii de retragere ai capului
de scriere n momentul nceperii unui nou desen.
De remarcat este faptul c configurarea iniial a formatului de lucru, adic definirea
axelor de coordonate OXY se poate modifica prin schimbarea semnalelor logice aplicate
blocurilor electronice, furnizate de perechile de ieiri D0-D1, respectiv D2-D3.
Cu alte cuvinte, dac semnalele logice furnizate de perechile de ieiri D0-D1 sunt
aplicate celuilat modul electronic i invers, atunci deplasarea pe axa OX devine deplasare pe
axa OY i invers. Trebuie avut n vedere i modificarea semnalelor provenite de la limitatorii
de retragere, adic schimbarea conexiunilor din pinul 13 n 15 i invers.
-33-
2. Open
- 34 -
3. Save
4. Draw Point
- desenare punct
5. Draw Line
- desenare linie
6. Draw Rectangle
7. Draw Ellipse
9. Print
10. Plot
- 35 -
- 36 -
8. Plot
9. Plot Setup
10.Exit
- desenare punct
- 37 -
2. Draw Line
- desenare linie
3. Draw Rectangle
4. Draw Ellipse
- 38 -
- 39 -
- 40 -
- 41 -
10 sau 100 de pai. Aceast funcie este necesar pentru determinarea constantelor de
deplasare ale mecanismelor generatoare de traiectorie (motor i transmisie mecanic).
Constantele de deplasare de pe axele OX i OY se pot scrie n caseta de dialog. Dac
nu se scriu, programul consider implicit c aceste dou constante sunt identice. Experimental
s-au determinat urmtoarele constante:
-
- 42 -
- 43 -
Dup aezarea figurilor geometrice, se activeaz comanda Plot din bara de instrumente iar
calculatorul va afia o caseta de dialog ateptnd un mesaj de confirmare din partea
operatorului. Acest mesaj condiioneaz nceperea operaiei de scriere.
Calculatorul va comanda i controla ntregul proces de scriere n ordinea strict n care
acestea au fost desenate pe foaia de lucru. Acest lucru este important n cazul reperelor n
form de trapez, poligoane, care pot fi compuse din linii simple. O succesiune judicioas a
liniilor componente poate conduce la reducerea timpilor de scriere.
- 44 -
- 45 -
#include "EditDrawLineDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditDrawLineDlg dialog
CEditDrawLineDlg::CEditDrawLineDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEditDrawLineDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEditDrawLineDlg)
m_x1 = 0.0f;
m_x2 = 0.0f;
m_y1 = 0.0f;
m_y2 = 0.0f;
//}}AFX_DATA_INIT
}
void CEditDrawLineDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditDrawLineDlg)
DDX_Text(pDX, IDC_X1, m_x1);
DDV_MinMaxFloat(pDX, m_x1, 0.f, 999.f);
DDX_Text(pDX, IDC_X2, m_x2);
DDV_MinMaxFloat(pDX, m_x2, 0.f, 999.f);
DDX_Text(pDX, IDC_Y1, m_y1);
DDV_MinMaxFloat(pDX, m_y1, 0.f, 999.f);
DDX_Text(pDX, IDC_Y2, m_y2);
DDV_MinMaxFloat(pDX, m_y2, 0.f, 999.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditDrawLineDlg, CDialog)
//{{AFX_MSG_MAP(CEditDrawLineDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditDrawLineDlg message handlers
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditDrawRectDlg dialog
CEditDrawRectDlg::CEditDrawRectDlg(CWnd* pParent /*=NULL*/)
: CDialog(CEditDrawRectDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CEditDrawRectDlg)
m_height = 0.0f;
m_width = 0.0f;
m_x = 0.0f;
m_y = 0.0f;
//}}AFX_DATA_INIT
}
void CEditDrawRectDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditDrawRectDlg)
DDX_Text(pDX, IDC_HEIGHT, m_height);
DDV_MinMaxFloat(pDX, m_height, 0.f, 999.f);
DDX_Text(pDX, IDC_WIDTH, m_width);
DDV_MinMaxFloat(pDX, m_width, 0.f, 999.f);
DDX_Text(pDX, IDC_X, m_x);
DDV_MinMaxFloat(pDX, m_x, 0.f, 999.f);
DDX_Text(pDX, IDC_Y, m_y);
DDV_MinMaxFloat(pDX, m_y, 0.f, 999.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditDrawRectDlg, CDialog)
//{{AFX_MSG_MAP(CEditDrawRectDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditDrawRectDlg message handlers
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code !
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR,
// status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.Create(this) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;
// fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1;
// fail to create
}
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
- 51 -
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFrameWnd::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
// Standard print setup command
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp construction
CPlotterEditorApp::CPlotterEditorApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CPlotterEditorApp object
CPlotterEditorApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp initialization
BOOL CPlotterEditorApp::InitInstance()
{
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
// Change the registry key under which our settings are stored.
// You should modify this string to be something appropriate
// such as the name of your company or organization.
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(); // Load standard INI file options (including MRU)
// Register the application's document templates. Document templates
// serve as the connection between documents, frame windows and views.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CPlotterEditorDoc),
RUNTIME_CLASS(CMainFrame),
// main SDI frame window
RUNTIME_CLASS(CPlotterEditorView));
AddDocTemplate(pDocTemplate);
// Enable DDE Execute open
EnableShellOpen();
RegisterShellFileTypes(TRUE);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
- 53 -
return TRUE;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
// No message handlers
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
- 54 -
// DDX/DDV support
END_MESSAGE_MAP()
// App command to run the dialog
void CPlotterEditorApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp commands
m_delay1 = 200000;
m_delay2 = 3000000;
- 55 -
CPlotterEditorDoc::~CPlotterEditorDoc()
{
}
BOOL CPlotterEditorDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
}
return TRUE;
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorDoc serialization
void CPlotterEditorDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
int size = m_drawingArray.GetSize();
ar << size;
for(int i=0 ; i<size ; ++i) {
tagDrawing* drawing = (tagDrawing*) m_drawingArray.GetAt(i);
ar << drawing->type;
ar << drawing->x;
ar << drawing->y;
ar << drawing->width;
ar << drawing->height;
}
}
else
{
}
UpdateAllViews(NULL);
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorDoc diagnostics
#ifdef _DEBUG
void CPlotterEditorDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CPlotterEditorDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorDoc commands
void CPlotterEditorDoc::DeleteContents()
{
// TODO: Add your specialized code here and/or call the base class
int size = m_drawingArray.GetSize();
for(int i=0 ; i<size ; ++i) {
tagDrawing* drawing = (tagDrawing*) m_drawingArray.GetAt(i);
delete drawing;
}
m_drawingArray.RemoveAll();
}
CDocument::DeleteContents();
<stdlib.h>
<conio.h>
<afx.h>
<math.h>
#include "stdafx.h"
#include "PlotterEditor.h"
#include "PlotterEditorDoc.h"
#include "PlotterEditorView.h"
#include "EditDrawPointDlg.h"
#include "EditDrawLineDlg.h"
- 57 -
#include
#include
#include
#include
#include
"EditDrawRectDlg.h"
"EditDrawEllipseDlg.h"
"TestLPTDlg.h"
"PlotterConstDlg.h"
"ToolsSetDelayDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define PI 3.1415
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView
IMPLEMENT_DYNCREATE(CPlotterEditorView, CView)
BEGIN_MESSAGE_MAP(CPlotterEditorView, CView)
//{{AFX_MSG_MAP(CPlotterEditorView)
ON_WM_SIZE()
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR_LAST, OnUpdateEditClearLast)
ON_COMMAND(ID_EDIT_DRAW_POINT, OnEditDrawPoint)
ON_COMMAND(ID_EDIT_CLEAR_LAST, OnEditClearLast)
ON_COMMAND(ID_EDIT_DRAW_LINE, OnEditDrawLine)
ON_COMMAND(ID_EDIT_DRAW_RECTANGLE, OnEditDrawRectangle)
ON_COMMAND(ID_EDIT_DRAW_ELLIPSE, OnEditDrawEllipse)
ON_COMMAND(ID_TOOLS_TEST_LPT, OnToolsTestLpt)
ON_COMMAND(ID_TOOLS_PLOTTER_CONST, OnToolsPlotterConst)
ON_COMMAND(ID_FILE_PLOT, OnFilePlot)
ON_COMMAND(ID_TOOLS_SET_DELAY, OnToolsSetDelay)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView construction/destruction
CPlotterEditorView::CPlotterEditorView()
{
// TODO: add construction code here
m_plotterConstX = 0.4;
m_plotterConstY = 0.4;
}
CPlotterEditorView::~CPlotterEditorView()
{
}
BOOL CPlotterEditorView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
- 58 -
// the CREATESTRUCT cs
}
return CView::PreCreateWindow(cs);
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorView drawing
void CPlotterEditorView::OnDraw(CDC* pDC)
{
CPlotterEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
m_virtualOffsetX = 48;
m_virtualOffsetY = 18;
m_virtualHeight = (m_clientHeight - 2 * m_virtualOffsetY);
m_virtualRatio = m_virtualHeight / pDoc->m_realHeight;
m_virtualWidth = m_virtualRatio * pDoc->m_realWidth;
if(m_clientWidth > m_virtualWidth + 2 * m_virtualOffsetX)
m_virtualOffsetX = (m_clientWidth - m_virtualWidth) / 2;
pDC->FillSolidRect(0,0,m_clientWidth,m_clientHeight,RGB(128,128,128));
pDC->Rectangle(m_virtualOffsetX,m_virtualOffsetY,
m_virtualOffsetX + m_virtualWidth,m_virtualOffsetY + m_virtualHeight);
pDC->SelectObject(CPen(PS_DOT,1,RGB(255,255,255)));
pDC->MoveTo(m_virtualOffsetX + m_virtualWidth / 2,m_virtualOffsetY);
pDC->LineTo(m_virtualOffsetX + m_virtualWidth / 2,m_virtualOffsetY + m_virtualHeight);
pDC->MoveTo(m_virtualOffsetX,m_virtualOffsetY + m_virtualHeight / 2);
pDC->LineTo(m_virtualOffsetX + m_virtualWidth,m_virtualOffsetY + m_virtualHeight / 2);
pDC->MoveTo(m_virtualOffsetX + m_virtualWidth / 4,m_virtualOffsetY);
pDC->LineTo(m_virtualOffsetX + m_virtualWidth / 4,m_virtualOffsetY + m_virtualHeight);
pDC->MoveTo(m_virtualOffsetX + 3 * m_virtualWidth / 4,m_virtualOffsetY);
pDC->LineTo(m_virtualOffsetX + 3 * m_virtualWidth / 4,m_virtualOffsetY + m_virtualHeight);
pDC->SetTextColor(RGB(255,255,255));
pDC->TextOut(m_virtualOffsetX,m_virtualOffsetY - 16,"0");
_gcvt(pDoc->m_realWidth / 4,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX + m_virtualWidth / 4,m_virtualOffsetY - 16,m_auxChar);
_gcvt(pDoc->m_realWidth / 2,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX + m_virtualWidth / 2,m_virtualOffsetY - 16,m_auxChar);
_gcvt(3 * pDoc->m_realWidth / 4,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX + 3 * m_virtualWidth / 4,m_virtualOffsetY - 16,m_auxChar);
_gcvt(pDoc->m_realWidth,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX + m_virtualWidth,m_virtualOffsetY - 16,m_auxChar);
pDC->TextOut(m_virtualOffsetX - 10,m_virtualOffsetY,"0");
_gcvt(pDoc->m_realHeight / 2,5,m_auxChar);
pDC->TextOut(m_virtualOffsetX - 46,m_virtualOffsetY + m_virtualHeight / 2,m_auxChar);
_gcvt(pDoc->m_realHeight,5,m_auxChar);
- 59 -
}
void CPlotterEditorView::OnUpdateEditClearLast(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CPlotterEditorDoc* pDoc = GetDocument();
pCmdUI->Enable(pDoc->m_drawingArray.GetSize() > 0);
}
void CPlotterEditorView::OnEditDrawPoint()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
CEditDrawPointDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult == IDOK) {
tagDrawing* drawing = new tagDrawing;
drawing->type = 0;
drawing->x = auxDlg.m_x;
drawing->y = auxDlg.m_y;
pDoc->m_drawingArray.Add(drawing);
}
}
Invalidate();
Invalidate();
void CPlotterEditorView::OnEditClearLast()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
m_auxSize = pDoc->m_drawingArray.GetSize();
tagDrawing* drawing = (tagDrawing*) pDoc->m_drawingArray.GetAt(m_auxSize - 1);
delete drawing;
pDoc->m_drawingArray.RemoveAt(m_auxSize - 1);
}
Invalidate();
void CPlotterEditorView::OnEditDrawLine()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
CEditDrawLineDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult == IDOK) {
tagDrawing* drawing = new tagDrawing;
drawing->type = 1;
drawing->x = auxDlg.m_x1;
- 62 -
}
}
drawing->y = auxDlg.m_y1;
drawing->width = auxDlg.m_x2;
drawing->height = auxDlg.m_y2;
pDoc->m_drawingArray.Add(drawing);
Invalidate();
void CPlotterEditorView::OnEditDrawRectangle()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
CEditDrawRectDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult == IDOK) {
tagDrawing* drawing = new tagDrawing;
drawing->type = 2;
drawing->x = auxDlg.m_x;
drawing->y = auxDlg.m_y;
drawing->width = auxDlg.m_width;
drawing->height = auxDlg.m_height;
pDoc->m_drawingArray.Add(drawing);
}
}
Invalidate();
void CPlotterEditorView::OnEditDrawEllipse()
{
// TODO: Add your command handler code here
CPlotterEditorDoc* pDoc = GetDocument();
CEditDrawEllipseDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult == IDOK) {
tagDrawing* drawing = new tagDrawing;
drawing->type = 3;
drawing->x = auxDlg.m_x1;
drawing->y = auxDlg.m_y1;
drawing->width = auxDlg.m_x2;
drawing->height = auxDlg.m_y2;
pDoc->m_drawingArray.Add(drawing);
}
Invalidate();
}
void CPlotterEditorView::OnToolsTestLpt()
{
// TODO: Add your command handler code here
_outp(0x378,0);
_outp(0x37A,11);
CTestLPTDlg auxDlg;
auxDlg.DoModal();
_outp(0x378,0);
- 63 -
_outp(0x37A,11);
}
void CPlotterEditorView::OnToolsPlotterConst()
{
// TODO: Add your command handler code here
CPlotterConstDlg auxDlg;
auxDlg.m_delay1 = m_delay1;
auxDlg.m_delay2 = m_delay2;
m_auxResult = auxDlg.DoModal();
if(m_auxResult==IDOK) {
m_plotterConstX = 0;
m_plotterConstY = 0;
if(auxDlg.m_valueX > 0) m_plotterConstX = 210.5 / auxDlg.m_valueX;
if(auxDlg.m_valueY > 0) m_plotterConstY = 297 / auxDlg.m_valueY;
if(auxDlg.m_constX > 0) m_plotterConstX = auxDlg.m_constX;
if(auxDlg.m_constY > 0) m_plotterConstY = auxDlg.m_constY;
if((m_plotterConstX==0) || (m_plotterConstY==0)) {
/*CFile auxFile("plotter.dat",CFile:modeRead);
auxFile.Read(auxChar,6);
m_plotterConstX = atof(auxChar);
auxFile.Read(auxChar,6);
m_plotterConstY = atof(auxChar);
auxFile.Close();
} else {
CFile auxFile("plotter.dat",CFile:modeCreate | CFile::modeWrite);
_gcvt(m_plotterConstX,6,auxChar);
auxFile.Write(auxChar,6);
_gcvt(m_plotterConstY,6,auxChar);
auxFile.Write(auxChar,6);
auxFile.Close();*/
m_plotterConstX = 0.4;
m_plotterConstY = 0.4;
}
}
_outp(0x378,value1);
Delay(m_delay1);
_outp(0x378,value2);
Delay(m_delay2);
cos(2*i*PI/30)),
case 2 : {
PlotterLineTo(m_auxX,m_auxY,0);
PlotterLineTo(m_auxX + m_auxWidth,m_auxY,1);
PlotterLineTo(m_auxX + m_auxWidth,m_auxY + m_auxHeight,1);
PlotterLineTo(m_auxX,m_auxY + m_auxHeight,1);
PlotterLineTo(m_auxX,m_auxY,1);
break;
}
case 3 : {
PlotterLineTo(m_auxX + m_auxWidth,m_auxY + m_auxHeight / 2,0);
for(i=0;i<30;i++)
PlotterLineTo(m_auxX + m_auxWidth / 2 + ((m_auxWidth / 2) *
m_auxY + m_auxHeight / 2 + ((m_auxHeight / 2) *
sin(2*i*PI/30)),1);
}
}
break;
}
_outp(0x378,0);
yp += py;
PlotterMove(0,py,Pen);
}
m_plotterCurrentX = xp;
m_plotterCurrentY = yp;
}
void CPlotterEditorView::OnToolsSetDelay()
{
// TODO: Add your command handler code here
CToolsSetDelayDlg auxDlg;
m_auxResult = auxDlg.DoModal();
if(m_auxResult==IDOK) {
CPlotterEditorDoc* pDoc = GetDocument();
pDoc->m_delay1 = auxDlg.m_delay1;
pDoc->m_delay2 = auxDlg.m_delay2;
m_delay1 = auxDlg.m_delay1;
m_delay2 = auxDlg.m_delay2;
}
m_const0 = 1;
m_const1 = 10;
m_const2 = 100;
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPlotterConstDlg)
DDX_Text(pDX, IDC_EDIT1, m_constX);
DDV_MinMaxFloat(pDX, m_constX, 0.f, 10.f);
DDX_Text(pDX, IDC_EDIT2, m_constY);
DDV_MinMaxFloat(pDX, m_constY, 0.f, 10.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPlotterConstDlg, CDialog)
//{{AFX_MSG_MAP(CPlotterConstDlg)
ON_BN_CLICKED(IDC_RESET, OnReset)
ON_BN_CLICKED(IDC_RIGHT0, OnRight0)
ON_BN_CLICKED(IDC_RIGHT1, OnRight1)
ON_BN_CLICKED(IDC_RIGHT2, OnRight2)
ON_BN_CLICKED(IDC_DOWN0, OnDown0)
ON_BN_CLICKED(IDC_DOWN1, OnDown1)
ON_BN_CLICKED(IDC_DOWN2, OnDown2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlotterConstDlg message handlers
void CPlotterConstDlg::Delay(long delay)
{
for(int i=0 ; i<delay ; i++) {}
}
void CPlotterConstDlg::OnReset()
{
// TODO: Add your control notification handler code here
while(((~_inp(0x379))&8) == 0) {
_outp(0x378,2);
Delay(m_delay1);
_outp(0x378,0);
Delay(m_delay2);
}
while(((~_inp(0x379))&16) == 0) {
_outp(0x378,8);
Delay(m_delay1);
_outp(0x378,0);
Delay(m_delay2);
}
m_valueX = 0;
m_valueY = 0;
}
void CPlotterConstDlg::Reset()
{
}
void CPlotterConstDlg::OnRight0()
{
- 68 -
void CPlotterConstDlg::OnRight1()
{
// TODO: Add your control notification handler code here
for(m_i=0 ; m_i<m_const1 ; m_i++) {
_outp(0x378,3);
Delay(m_delay1);
_outp(0x378,1);
Delay(m_delay2);
m_valueX++;
}
_outp(0x378,0);
}
void CPlotterConstDlg::OnRight2()
{
// TODO: Add your control notification handler code here
void CPlotterConstDlg::OnDown0()
{
// TODO: Add your control notification handler code here
void CPlotterConstDlg::OnDown1()
{
// TODO: Add your control notification handler code here
- 69 -
m_d6 = FALSE;
m_d7 = FALSE;
//}}AFX_DATA_INIT
void CTestLPTDlg::OnD0()
{
// TODO: Add your control notification handler code here
- 71 -
UpdateData(true);
if(m_d0) _outp(0x378,_inp(0x378)|1); else _outp(0x378,_inp(0x378)&254);
void CTestLPTDlg::OnD1()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d1) _outp(0x378,_inp(0x378)|2); else _outp(0x378,_inp(0x378)&253);
}
void CTestLPTDlg::OnD2()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d2) _outp(0x378,_inp(0x378)|4); else _outp(0x378,_inp(0x378)&251);
}
void CTestLPTDlg::OnD3()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d3) _outp(0x378,_inp(0x378)|8); else _outp(0x378,_inp(0x378)&247);
}
void CTestLPTDlg::OnD4()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d4) _outp(0x378,_inp(0x378)|16); else _outp(0x378,_inp(0x378)&239);
}
void CTestLPTDlg::OnD5()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d5) _outp(0x378,_inp(0x378)|32); else _outp(0x378,_inp(0x378)&223);
}
void CTestLPTDlg::OnD6()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d6) _outp(0x378,_inp(0x378)|64); else _outp(0x378,_inp(0x378)&191);
}
- 72 -
void CTestLPTDlg::OnD7()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_d7) _outp(0x378,_inp(0x378)|128); else _outp(0x378,_inp(0x378)&127);
}
void CTestLPTDlg::OnC0()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_c0) _outp(0x37A,_inp(0x37A)&254); else _outp(0x37A,_inp(0x37A)|1);
}
void CTestLPTDlg::OnC1()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_c1) _outp(0x37A,_inp(0x37A)&253); else _outp(0x37A,_inp(0x37A)|2);
void CTestLPTDlg::OnC2()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_c2) _outp(0x37A,_inp(0x37A)|4); else _outp(0x37A,_inp(0x37A)&251);
void CTestLPTDlg::OnC3()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(m_c3) _outp(0x37A,_inp(0x37A)&247); else _outp(0x37A,_inp(0x37A)|8);
# Begin Project
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "PlotterEditor - Win32 Release"
# PROP BASE Use_MFC 5
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 5
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Yu"stdafx.h" /FD
/c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Yu"stdafx.h" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD BASE RSC /l 0x418 /d "NDEBUG"
# ADD RSC /l 0x418 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
# ADD LINK32 /nologo /subsystem:windows /machine:I386
!ELSEIF "$(CFG)" == "PlotterEditor - Win32 Debug"
# PROP BASE Use_MFC 5
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 5
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS"
/Yu"stdafx.h" /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Yu"stdafx.h"
/FD /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
# ADD BASE RSC /l 0x418 /d "_DEBUG"
# ADD RSC /l 0x418 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
- 75 -
!ENDIF
# Begin Target
# Name "PlotterEditor - Win32 Release"
# Name "PlotterEditor - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\EditDrawEllipseDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\EditDrawLineDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\EditDrawPointDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\EditDrawRectDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\MainFrm.cpp
# End Source File
# Begin Source File
SOURCE=.\PlotterConstDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\PlotterEditor.cpp
# End Source File
# Begin Source File
SOURCE=.\PlotterEditor.rc
!IF "$(CFG)" == "PlotterEditor - Win32 Release"
!ELSEIF "$(CFG)" == "PlotterEditor - Win32 Debug"
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\PlotterEditorDoc.cpp
# End Source File
# Begin Source File
SOURCE=.\PlotterEditorView.cpp
# End Source File
# Begin Source File
- 76 -
SOURCE=.\StdAfx.cpp
# ADD CPP /Yc"stdafx.h"
# End Source File
# Begin Source File
SOURCE=.\TestLPTDlg.cpp
# End Source File
# Begin Source File
SOURCE=.\ToolsSetDelayDlg.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\EditDrawEllipseDlg.h
# End Source File
# Begin Source File
SOURCE=.\EditDrawLineDlg.h
# End Source File
# Begin Source File
SOURCE=.\EditDrawPointDlg.h
# End Source File
# Begin Source File
SOURCE=.\EditDrawRectDlg.h
# End Source File
# Begin Source File
SOURCE=.\MainFrm.h
# End Source File
# Begin Source File
SOURCE=.\PlotterConstDlg.h
# End Source File
# Begin Source File
SOURCE=.\PlotterEditor.h
# End Source File
# Begin Source File
SOURCE=.\PlotterEditorDoc.h
# End Source File
# Begin Source File
SOURCE=.\PlotterEditorView.h
# End Source File
# Begin Source File
SOURCE=.\Resource.h
# End Source File
# Begin Source File
SOURCE=.\StdAfx.h
# End Source File
- 77 -
// Dialog Data
//{{AFX_DATA(CEditDrawPointDlg)
enum { IDD = IDD_EDITDRAWPOINTBOX };
float
m_x;
float
m_y;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDrawPointDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
// DDX/DDV support
// Implementation
protected:
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_EDITDRAWPOINTDLG_H__F9AE1380_24A0_11D5_A094_C6DB39E54D50__INCLUDED_)
float
m_y1;
float
m_y2;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDrawLineDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
// DDX/DDV support
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CEditDrawLineDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_EDITDRAWLINEDLG_H__77B9CF02_24A4_11D5_A094_C6DB39E54D50__INCLUDED_)
float
m_x;
float
m_y;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDrawRectDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
// DDX/DDV support
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CEditDrawRectDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_EDITDRAWRECTDLG_H__77B9CF03_24A4_11D5_A094_C6DB39E54D50__INCLUDED_)
float
m_x2;
float
m_y1;
float
m_y2;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditDrawEllipseDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
// DDX/DDV support
// Implementation
protected:
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_EDITDRAWELLIPSEDLG_H__93500483_24AB_11D5_A094_841A4841E461__INCLUDED_)
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMainFrame)
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected: // control bar embedded members
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_MAINFRM_H__7EDCA088_14FC_11D5_A094_95DD9E463755__INCLUDED_)
// main symbols
struct tagDrawing {
- 83 -
int type;
float x,y,width,height;
};
/////////////////////////////////////////////////////////////////////////////
// CPlotterEditorApp:
// See PlotterEditor.cpp for the implementation of this class
//
class CPlotterEditorApp : public CWinApp
{
public:
CPlotterEditorApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPlotterEditorApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
};
//{{AFX_MSG(CPlotterEditorApp)
afx_msg void OnAppAbout();
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_PLOTTEREDITOR_H__7EDCA084_14FC_11D5_A094_95DD9E463755__INCLUDED_)
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPlotterEditorDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
virtual void DeleteContents();
//}}AFX_VIRTUAL
// Implementation
public:
long m_delay2;
long m_delay1;
CPtrArray m_drawingArray;
float m_realHeight;
float m_realWidth;
virtual ~CPlotterEditorDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CPlotterEditorDoc)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
// Attributes
public:
CPlotterEditorDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPlotterEditorView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
//}}AFX_VIRTUAL
// Implementation
public:
long m_delay2;
long m_delay1;
void PlotterLineTo(float X, float Y, int Pen);
int m_plotterCurrentY;
int m_plotterCurrentX;
void Delay(long time);
void PlotterMove(int incX,int incY,int pen);
float m_plotterConstY;
float m_plotterConstX;
int m_auxResult;
float m_auxX,m_auxY,m_auxWidth,m_auxHeight;
int m_auxType;
int m_auxSize;
char m_auxChar[7];
float m_virtualOffsetY;
float m_virtualOffsetX;
float m_virtualRatio;
float m_virtualHeight;
float m_virtualWidth;
float m_clientHeight;
float m_clientWidth;
virtual ~CPlotterEditorView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CPlotterEditorView)
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnFileNew();
afx_msg void OnUpdateEditClearLast(CCmdUI* pCmdUI);
- 86 -
};
// Dialog Data
//{{AFX_DATA(CPlotterConstDlg)
enum { IDD = IDD_PLOTTERCONSTBOX };
float
m_constX;
float
m_constY;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPlotterConstDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
// DDX/DDV support
// Implementation
protected:
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
!defined(AFX_PLOTTERCONSTDLG_H__5D137F82_24E4_11D5_A094_9C041ACA4250__INCLUDED_)
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by PlotterEditor.rc
//
#define IDD_ABOUTBOX
100
#define IDR_MAINFRAME
128
#define IDR_PLOTTETYPE
129
#define IDD_TESTLPTBOX
134
#define IDD_EDITDRAWPOINTBOX
145
#define IDD_EDITDRAWLINEBOX
146
#define IDD_EDITDRAWRECTBOX
147
#define IDD_EDITDRAWELLIPSEBOX
148
#define IDD_PLOTTERCONSTBOX
149
#define IDD_TOOLSSETDELAYBOX
150
#define IDC_D0
1000
#define IDC_D1
1001
#define IDC_D2
1002
#define IDC_D3
1003
#define IDC_D4
1004
#define IDC_D5
1005
#define IDC_D6
1006
#define IDC_D7
1007
#define IDC_C0
1008
- 88 -
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
IDC_C1
1009
IDC_C2
1010
IDC_C3
1011
IDC_LIST1
1012
IDC_X
1024
IDC_Y
1025
IDC_X1
1026
IDC_Y1
1027
IDC_X2
1028
IDC_Y2
1029
IDC_WIDTH
1030
IDC_HEIGHT
1031
IDC_RESET
1034
IDC_DOWN0
1035
IDC_DOWN1
1036
IDC_DOWN2
1037
IDC_RIGHT0
1038
IDC_RIGHT1
1039
IDC_RIGHT2
1040
IDC_EDIT1
1041
IDC_EDIT2
1042
ID_FILE_PLOT
32771
ID_FILE_PLOT_SETUP
32772
ID_EDIT_DRAW_POINT
32776
ID_EDIT_DRAW_LINE
32777
ID_EDIT_DRAW_RECTANGLE
32778
ID_EDIT_DRAW_ELLIPSE
32779
ID_EDIT_CLEAR_LAST
32780
ID_TOOLS_TEST_LPT
32782
ID_TOOLS_PLOTTER_CONST
32793
ID_TOOLS_SET_DELAY
32794
1
151
32795
1043
101
// CTestLPTDlg dialog
class CTestLPTDlg : public CDialog
{
// Construction
public:
CTestLPTDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CTestLPTDlg)
enum { IDD = IDD_TESTLPTBOX };
BOOL m_c0;
BOOL m_c1;
BOOL m_c2;
BOOL m_c3;
BOOL m_d0;
BOOL m_d1;
BOOL m_d2;
BOOL m_d3;
BOOL m_d4;
BOOL m_d5;
BOOL m_d6;
BOOL m_d7;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTestLPTDlg)
public:
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const
RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CTestLPTDlg)
afx_msg void OnD0();
afx_msg void OnD1();
afx_msg void OnD2();
afx_msg void OnD3();
afx_msg void OnD4();
afx_msg void OnD5();
afx_msg void OnD6();
afx_msg void OnD7();
afx_msg void OnC0();
afx_msg void OnC1();
afx_msg void OnC2();
afx_msg void OnC3();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
- 90 -
#endif // !defined(AFX_TESTLPTDLG_H__119B9A20_1543_11D5_A094_CCEF6A82B456__INCLUDED_)
// DDX/DDV support
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CToolsSetDelayDlg)
// NOTE: the ClassWizard will add member functions here
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif //
!defined(AFX_TOOLSSETDELAYDLG_H__E4D6C262_2A8E_11D5_A095_903C3C56E952__INCLUDED_)
"32-bit C/C++ Compiler for 80x86" with flags "/nologo /MTd /W3 /Gm /GX /Zi /Od
/D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fp"Debug/PlotterEditor.pch" /Yu"stdafx.h" /Fo"Debug/"
/Fd"Debug/" /FD /c "
"OLE Type Library Maker" with flags "/nologo /D "_DEBUG" /mktyplib203 /o NUL
/win32 "
"Win32 Resource Compiler" with flags "/l 0x418 /fo"Debug/PlotterEditor.res" /d
"_DEBUG" "
"Browser Database Maker" with flags "/nologo /o"Debug/PlotterEditor.bsc" "
"COFF Linker for 80x86" with flags "/nologo /subsystem:windows /incremental:yes
/pdb:"Debug/PlotterEditor.pdb" /debug /machine:I386 /out:"Debug/PlotterEditor.exe" /pdbtype:sept "
"Custom Build" with flags ""
"<Component 0xa>" with flags ""
Creating temp file "C:\WINDOWS\TEMP\RSPE353.TMP" with contents </nologo /subsystem:windows
/incremental:yes /pdb:"Debug/PlotterEditor.pdb" /debug /machine:I386 /out:"Debug/PlotterEditor.exe"
/pdbtype:sept
".\Debug\EditDrawEllipseDlg.obj"
".\Debug\EditDrawLineDlg.obj"
".\Debug\EditDrawPointDlg.obj"
".\Debug\EditDrawRectDlg.obj"
".\Debug\MainFrm.obj"
".\Debug\PlotterConstDlg.obj"
".\Debug\PlotterEditor.obj"
".\Debug\PlotterEditorDoc.obj"
".\Debug\PlotterEditorView.obj"
".\Debug\StdAfx.obj"
".\Debug\TestLPTDlg.obj"
".\Debug\PlotterEditor.res"
".\Debug\ToolsSetDelayDlg.obj">
Creating command line "link.exe @C:\WINDOWS\TEMP\RSPE353.TMP"
Linking...
PlotterEditor.exe - 0 error(s), 0 warning(s)
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Romanian resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ROM)
#ifdef _WIN32
LANGUAGE LANG_ROMANIAN, SUBLANG_DEFAULT
#pragma code_page(1250)
- 92 -
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif\r\n"
"#include ""res\\PlotterEditor.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""afxres.rc""
// Standard components\r\n"
"#include ""afxprint.rc""
// printing/print preview resources\r\n"
IDD_TESTLPTBOX DIALOG DISCARDABLE 0, 0, 248, 165
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Testing Standard Parallel Port (SPP)"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,98,144,50,14
GROUPBOX
"Output At 378h : D0 -> D7",IDC_STATIC,4,4,240,34
GROUPBOX
"Output At 37Ah : C0 -> C3",IDC_STATIC,4,46,240,32
CONTROL
"D0",IDC_D0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,18,
24,12
CONTROL
"D1",IDC_D1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,184,18,
24,12
CONTROL
"D2",IDC_D2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,18,
24,12
CONTROL
"D3",IDC_D3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,128,18,
24,12
CONTROL
"D4",IDC_D4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,100,18,
24,12
CONTROL
"D5",IDC_D5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,18,
24,12
CONTROL
"D6",IDC_D6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,44,18,
24,12
CONTROL
"D7",IDC_D7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,
24,12
CONTROL
"C0",IDC_C0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,212,58,
- 93 -
24,12
"C1",IDC_C1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,184,58,
24,12
CONTROL
"C2",IDC_C2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,156,58,
24,12
CONTROL
"C3",IDC_C3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,128,58,
24,12
GROUPBOX
"Input From 379h : S3 -> S7",IDC_STATIC,4,84,240,52
LISTBOX
IDC_LIST1,128,98,106,30,LBS_NOINTEGRALHEIGHT | LBS_NOSEL |
WS_VSCROLL | WS_TABSTOP
END
CONTROL
LTEXT
LTEXT
LTEXT
EDITTEXT
EDITTEXT
LTEXT
LTEXT
LTEXT
LTEXT
EDITTEXT
EDITTEXT
END
"Y",IDC_STATIC,16,34,12,8
"mm",IDC_STATIC,94,16,12,8
"mm",IDC_STATIC,94,34,12,8
IDC_X,40,16,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
IDC_Y,40,34,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
"Width",IDC_STATIC,16,52,20,8
"Height",IDC_STATIC,16,68,22,8
"mm",IDC_STATIC,94,50,12,8
"mm",IDC_STATIC,94,68,12,8
IDC_WIDTH,40,50,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
IDC_HEIGHT,40,66,50,10,ES_AUTOHSCROLL,WS_EX_RIGHT
GROUPBOX
EDITTEXT
EDITTEXT
LTEXT
LTEXT
LTEXT
LTEXT
END
"Const Values",IDC_STATIC,4,166,184,44
IDC_EDIT1,48,178,42,10,ES_AUTOHSCROLL,WS_EX_RIGHT
IDC_EDIT2,48,194,42,10,ES_AUTOHSCROLL,WS_EX_RIGHT
"Const X",IDC_STATIC,16,180,28,8
"Const Y",IDC_STATIC,16,196,28,8
"mm/step",IDC_STATIC,94,180,28,8
"mm/step",IDC_STATIC,94,194,28,8
TOPMARGIN, 7
BOTTOMMARGIN, 106
END
IDD_EDITDRAWELLIPSEBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 105
TOPMARGIN, 7
BOTTOMMARGIN, 106
END
IDD_PLOTTERCONSTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 185
TOPMARGIN, 7
BOTTOMMARGIN, 230
END
IDD_TOOLSSETDELAYBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 111
TOPMARGIN, 7
BOTTOMMARGIN, 51
END
END
#endif // APSTUDIO_INVOKED
#endif // Romanian resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME
ICON DISCARDABLE
"res\\PlotterEditor.ico"
IDR_PLOTTETYPE
ICON DISCARDABLE
"res\\PlotterEditorDoc.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDR_MAINFRAME
/////////////////////////////////////////////////////////////////////////////
//
// Toolbar
//
IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15
BEGIN
BUTTON
ID_FILE_NEW
BUTTON
ID_FILE_OPEN
BUTTON
ID_FILE_SAVE
SEPARATOR
BUTTON
ID_EDIT_DRAW_POINT
BUTTON
ID_EDIT_DRAW_LINE
BUTTON
ID_EDIT_DRAW_RECTANGLE
BUTTON
ID_EDIT_DRAW_ELLIPSE
BUTTON
ID_EDIT_CLEAR_LAST
SEPARATOR
BUTTON
ID_FILE_PRINT
BUTTON
ID_FILE_PLOT
SEPARATOR
BUTTON
ID_APP_ABOUT
END
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N",
ID_FILE_NEW
MENUITEM "&Open...\tCtrl+O",
ID_FILE_OPEN
MENUITEM "&Save\tCtrl+S",
ID_FILE_SAVE
MENUITEM "Save &As...",
ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "&Print...\tCtrl+P",
ID_FILE_PRINT
MENUITEM "Print Pre&view",
ID_FILE_PRINT_PREVIEW
MENUITEM "P&rint Setup...",
ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "P&lot...\tCtrl+L",
ID_FILE_PLOT
MENUITEM "Plo&t Setup",
ID_TOOLS_PLOTTER_CONST
MENUITEM SEPARATOR
MENUITEM "Recent File",
ID_FILE_MRU_FILE1, GRAYED
MENUITEM SEPARATOR
MENUITEM "E&xit",
ID_APP_EXIT
END
POPUP "&Edit"
BEGIN
POPUP "&Draw"
BEGIN
MENUITEM "&Point",
ID_EDIT_DRAW_POINT
MENUITEM "&Line",
ID_EDIT_DRAW_LINE
MENUITEM "&Rectangle",
ID_EDIT_DRAW_RECTANGLE
MENUITEM "&Ellipse",
ID_EDIT_DRAW_ELLIPSE
END
- 98 -
ID_EDIT_CLEAR_LAST
ID_VIEW_TOOLBAR
ID_VIEW_STATUS_BAR
ID_TOOLS_TEST_LPT
ID_TOOLS_PLOTTER_CONST
ID_TOOLS_SET_DELAY
ID_APP_ABOUT
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE
BEGIN
"L",
ID_FILE_PLOT,
VIRTKEY, CONTROL, NOINVERT
"N",
ID_FILE_NEW,
VIRTKEY, CONTROL, NOINVERT
"O",
ID_FILE_OPEN,
VIRTKEY, CONTROL, NOINVERT
"P",
ID_FILE_PRINT,
VIRTKEY, CONTROL, NOINVERT
"S",
ID_FILE_SAVE,
VIRTKEY, CONTROL, NOINVERT
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 55
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About PlotterEditor"
FONT 8, "MS Sans Serif"
BEGIN
ICON
IDR_MAINFRAME,IDC_STATIC,11,17,20,20
LTEXT
"PlotterEditor Version 1.0",IDC_STATIC,40,10,119,8,
SS_NOPREFIX
LTEXT
"Copyright (C) 2001",IDC_STATIC,40,34,119,8
DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
LTEXT
"Mihai Bodor",IDC_STATIC,40,22,87,9
END
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
- 99 -
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Bodor Mihai\0"
VALUE "FileDescription", "PlotterEditor MFC Application\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "PlotterEditor\0"
VALUE "LegalCopyright", "Copyright (C) 2001\0"
VALUE "OriginalFilename", "PlotterEditor.EXE\0"
VALUE "ProductName", "PlotterEditor Application\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif
// !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 210
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
- 100 -
//
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_MAINFRAME
"PlotterEditor\n\nPlotter\nPlotter Files
(*.plt)\n.plt\nPlotterEditor.Document\nPlotter Document"
END
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
AFX_IDS_APP_TITLE
"PlotterEditor"
AFX_IDS_IDLEMESSAGE
"Ready"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_INDICATOR_EXT
"EXT"
ID_INDICATOR_CAPS
"CAP"
ID_INDICATOR_NUM
"NUM"
ID_INDICATOR_SCRL
"SCRL"
ID_INDICATOR_OVR
"OVR"
ID_INDICATOR_REC
"REC"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_NEW
"Create a new document\nNew"
ID_FILE_OPEN
"Open an existing document\nOpen"
ID_FILE_CLOSE
"Close the active document\nClose"
ID_FILE_SAVE
"Save the active document\nSave"
ID_FILE_SAVE_AS
"Save the active document with a new name\nSave As"
ID_FILE_PAGE_SETUP
"Change the printing options\nPage Setup"
ID_FILE_PRINT_SETUP
"Change the printer and printing options\nPrint Setup"
ID_FILE_PRINT
"Print the active document\nPrint"
ID_FILE_PRINT_PREVIEW "Display full pages\nPrint Preview"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_APP_ABOUT
"Display program information, version number and copyright\nAbout"
ID_APP_EXIT
"Quit the application; prompts to save documents\nExit"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_MRU_FILE1
"Open this document"
ID_FILE_MRU_FILE2
"Open this document"
ID_FILE_MRU_FILE3
"Open this document"
ID_FILE_MRU_FILE4
"Open this document"
ID_FILE_MRU_FILE5
"Open this document"
ID_FILE_MRU_FILE6
"Open this document"
ID_FILE_MRU_FILE7
"Open this document"
ID_FILE_MRU_FILE8
"Open this document"
ID_FILE_MRU_FILE9
"Open this document"
ID_FILE_MRU_FILE10
"Open this document"
ID_FILE_MRU_FILE11
"Open this document"
ID_FILE_MRU_FILE12
"Open this document"
ID_FILE_MRU_FILE13
"Open this document"
ID_FILE_MRU_FILE14
"Open this document"
- 101 -
ID_FILE_MRU_FILE15
ID_FILE_MRU_FILE16
END
STRINGTABLE DISCARDABLE
BEGIN
ID_NEXT_PANE
"Switch to the next window pane\nNext Pane"
ID_PREV_PANE
"Switch back to the previous window pane\nPrevious Pane"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_WINDOW_SPLIT
"Split the active window into panes\nSplit"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_VIEW_TOOLBAR
"Show or hide the toolbar\nToggle ToolBar"
ID_VIEW_STATUS_BAR
"Show or hide the status bar\nToggle StatusBar"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_SCSIZE
"Change the window size"
AFX_IDS_SCMOVE
"Change the window position"
AFX_IDS_SCMINIMIZE
"Reduce the window to an icon"
AFX_IDS_SCMAXIMIZE
"Enlarge the window to full size"
AFX_IDS_SCNEXTWINDOW "Switch to the next document window"
AFX_IDS_SCPREVWINDOW "Switch to the previous document window"
AFX_IDS_SCCLOSE
"Close the active window and prompts to save the documents"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_SCRESTORE
"Restore the window to normal size"
AFX_IDS_SCTASKLIST
"Activate Task List"
END
STRINGTABLE DISCARDABLE
BEGIN
AFX_IDS_PREVIEW_CLOSE "Close print preview mode\nCancel Preview"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_FILE_PLOT
"Plot the active document\nPlot"
ID_FILE_PLOT_SETUP
"Change the plotter settings\nPlot Setup"
ID_EDIT_DRAW_POINT
"Draw point\nDraw Point"
ID_EDIT_DRAW_LINE
"Draw line\nDraw Line"
ID_EDIT_DRAW_RECTANGLE "Draw rectangle\nDraw Rectangle"
ID_EDIT_DRAW_ELLIPSE "Draw ellipse\nDraw Ellipse"
ID_EDIT_CLEAR_LAST
"Clear last drawing\nClear Last Drawing"
ID_TOOLS_TEST_LPT
"Test LPT port\nTest LPT Port"
END
STRINGTABLE DISCARDABLE
BEGIN
ID_TOOLS_PLOTTER_CONST "Set Up Plotter\nPlotter Setup"
ID_TOOLS_SET_DELAY
"Set stepping delay\nStepping Delay"
- 102 -
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif
#include "res\PlotterEditor.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc"
// Standard components
#include "afxprint.rc"
// printing/print preview resources
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
- 103 -
6. BIBLIOGRAFIE
1. Kelemen, A., Crivii, M. Motoare electrice pas cu pas. Editura Tehnica, Bucureti, 1975
2. Mgureanu, R., Nicolae, V. Motoare sincrone cu magnei permaneni i reluctan
variabil. Editura Tehnica, Bucureti, 1982
- 104 -