2016-11-16 10:00:30 +03:00
|
|
|
|
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
|
2015-06-27 19:33:50 +03:00
|
|
|
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
|
|
|
|
|
2015-12-28 14:25:15 +03:00
|
|
|
|
///Исполнитель Чертежник предназначен для построения рисунков и чертежей на плоскости с координатами.
|
|
|
|
|
|
///Чертежник имеет перо, которое он может поднимать, опускать и перемещать. При перемещении опущенного пера за ним остается след.
|
2015-05-14 22:35:07 +03:00
|
|
|
|
unit Drawman;
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Устанавливает скорость Чертежника равной n (n=0..10)
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure Speed(n: integer);
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Поднять перо
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure PenUp;
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Опустить перо
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure PenDown;
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Переместиться к точке (x,y)
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure ToPoint(x,y: integer);
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Переместиться на вектор (a,b)
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure OnVector(a,b: integer);
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Вызывать задание с именем name
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure Task(name: string);
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Создать пустое поле размера 9 на 11 клеток
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure StandardField;
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Создать пустое поле размера n на m клеток
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure Field(n,m: integer);
|
|
|
|
|
|
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Запустить Чертежника
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure Start;
|
2015-12-28 14:25:15 +03:00
|
|
|
|
/// Остановить Чертежника
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure Stop;
|
|
|
|
|
|
|
2016-11-20 23:43:57 +03:00
|
|
|
|
/// Поднять перо
|
|
|
|
|
|
procedure ОпуститьПеро;
|
|
|
|
|
|
/// Опустить перо
|
|
|
|
|
|
procedure ПоднятьПеро;
|
|
|
|
|
|
/// Переместиться к точке (x,y)
|
|
|
|
|
|
procedure КТочке(x,y: integer);
|
|
|
|
|
|
/// Переместиться на вектор (a,b)
|
|
|
|
|
|
procedure НаВектор(a,b: integer);
|
|
|
|
|
|
/// Вызывать задание с данным именем
|
|
|
|
|
|
procedure Задание(имя: string);
|
|
|
|
|
|
/// Создать пустое поле размера 9 на 11 клеток
|
|
|
|
|
|
procedure СтандартноеПоле;
|
|
|
|
|
|
/// Создать пустое поле размера n на m клеток
|
|
|
|
|
|
procedure Поле(n,m: integer);
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-11-16 10:00:30 +03:00
|
|
|
|
/// Установить ширину пера Чертежника
|
|
|
|
|
|
procedure SetDrawmanWidth(w: integer);
|
|
|
|
|
|
|
2015-05-14 22:35:07 +03:00
|
|
|
|
///--
|
|
|
|
|
|
procedure __InitModule__;
|
|
|
|
|
|
///--
|
|
|
|
|
|
procedure __FinalizeModule__;
|
|
|
|
|
|
|
|
|
|
|
|
implementation
|
|
|
|
|
|
|
|
|
|
|
|
uses DMTaskMaker,DMZadan,DrawmanField;
|
|
|
|
|
|
|
2016-11-16 10:00:30 +03:00
|
|
|
|
procedure SetDrawmanWidth(w: integer);
|
|
|
|
|
|
begin
|
|
|
|
|
|
DMField.dmwidth := w
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure Start;
|
|
|
|
|
|
begin
|
|
|
|
|
|
DMField.Start;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure Stop;
|
|
|
|
|
|
begin
|
|
|
|
|
|
DMField.Stop;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure Speed(n: integer);
|
|
|
|
|
|
begin
|
|
|
|
|
|
DMField.SetSpeed(n);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure PenUp;
|
|
|
|
|
|
begin
|
|
|
|
|
|
DMField.PenUp;
|
|
|
|
|
|
if DMField.StepState then
|
|
|
|
|
|
Stop
|
|
|
|
|
|
else DMField.Pause;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure PenDown;
|
|
|
|
|
|
begin
|
|
|
|
|
|
DMField.PenDown;
|
|
|
|
|
|
if DMField.StepState then
|
|
|
|
|
|
Stop
|
|
|
|
|
|
else DMField.Pause;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure ToPoint(x,y: integer);
|
|
|
|
|
|
begin
|
|
|
|
|
|
DMField.ToPoint(x,y);
|
|
|
|
|
|
if DMField.StepState then
|
|
|
|
|
|
Stop
|
|
|
|
|
|
else DMField.Pause;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure OnVector(a,b: integer);
|
|
|
|
|
|
begin
|
|
|
|
|
|
DMField.OnVector(a,b);
|
|
|
|
|
|
if DMField.StepState then
|
|
|
|
|
|
Stop
|
|
|
|
|
|
else DMField.Pause;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure StandardField;
|
|
|
|
|
|
var x,y: integer;
|
|
|
|
|
|
begin
|
2015-12-28 14:25:15 +03:00
|
|
|
|
TaskText('Стандартное поле');
|
2015-05-14 22:35:07 +03:00
|
|
|
|
x := 9; y := 7;
|
|
|
|
|
|
DMTaskMaker.Field(x,y);
|
|
|
|
|
|
CorrectFieldBounds;
|
|
|
|
|
|
SetTaskCall;
|
|
|
|
|
|
Stop;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure Field(n,m: integer);
|
|
|
|
|
|
begin
|
2015-12-28 14:25:15 +03:00
|
|
|
|
TaskText('Поле '+IntToStr(n)+'x'+IntToStr(m));
|
2015-05-14 22:35:07 +03:00
|
|
|
|
DMTaskMaker.Field(n,m);
|
|
|
|
|
|
CorrectFieldBounds;
|
|
|
|
|
|
SetTaskCall;
|
|
|
|
|
|
Stop;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2016-11-20 23:43:57 +03:00
|
|
|
|
procedure ОпуститьПеро := PenDown;
|
|
|
|
|
|
procedure ПоднятьПеро := PenUp;
|
|
|
|
|
|
procedure КТочке(x,y: integer) := ToPoint(x,y);
|
|
|
|
|
|
procedure НаВектор(a,b: integer) := OnVector(a,b);
|
|
|
|
|
|
procedure Задание(имя: string) := Task(имя);
|
|
|
|
|
|
procedure СтандартноеПоле := StandardField;
|
|
|
|
|
|
procedure Поле(n,m: integer) := Field(n,m);
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-05-14 22:35:07 +03:00
|
|
|
|
procedure RegisterTasks;
|
|
|
|
|
|
begin
|
|
|
|
|
|
RegisterTask('a1',a1);
|
|
|
|
|
|
RegisterTask('a2',a2);
|
|
|
|
|
|
RegisterTask('a3',a3);
|
|
|
|
|
|
RegisterTask('a4',a4);
|
|
|
|
|
|
RegisterTask('a5',a5);
|
|
|
|
|
|
RegisterTask('a6',a6);
|
|
|
|
|
|
|
|
|
|
|
|
RegisterTask('c1',c1);
|
|
|
|
|
|
RegisterTask('c2',c2);
|
|
|
|
|
|
RegisterTask('c3',c3);
|
|
|
|
|
|
RegisterTask('c4',c4);
|
|
|
|
|
|
RegisterTask('c5',c5);
|
|
|
|
|
|
RegisterTask('c6',c6);
|
|
|
|
|
|
RegisterTask('c7',c7);
|
|
|
|
|
|
RegisterTask('c8',c8);
|
|
|
|
|
|
RegisterTask('c9',c9);
|
|
|
|
|
|
RegisterTask('c10',c10);
|
|
|
|
|
|
RegisterTask('c11',c11);
|
|
|
|
|
|
RegisterTask('c12',c12);
|
|
|
|
|
|
RegisterTask('c13',c13);
|
|
|
|
|
|
RegisterTask('c14',c14);
|
|
|
|
|
|
RegisterTask('c15',c15);
|
|
|
|
|
|
RegisterTask('c16',c16);
|
|
|
|
|
|
RegisterTask('c17',c17);
|
|
|
|
|
|
RegisterTask('c18',c18);
|
|
|
|
|
|
RegisterTask('c19',c19);
|
|
|
|
|
|
RegisterTask('c20',c20);
|
|
|
|
|
|
RegisterTask('c21',c21);
|
|
|
|
|
|
RegisterTask('c22',c22);
|
|
|
|
|
|
RegisterTask('c23',c23);
|
|
|
|
|
|
RegisterTask('c24',c24);
|
|
|
|
|
|
RegisterTask('c25',c25);
|
|
|
|
|
|
RegisterTask('c26',c26);
|
|
|
|
|
|
|
|
|
|
|
|
RegisterTask('cc1',cc1);
|
|
|
|
|
|
RegisterTask('cc2',cc2);
|
|
|
|
|
|
RegisterTask('cc3',cc3);
|
|
|
|
|
|
RegisterTask('cc4',cc4);
|
|
|
|
|
|
RegisterTask('cc5',cc5);
|
|
|
|
|
|
RegisterTask('cc6',cc6);
|
|
|
|
|
|
RegisterTask('cc7',cc7);
|
|
|
|
|
|
RegisterTask('cc8',cc8);
|
|
|
|
|
|
RegisterTask('cc9',cc9);
|
|
|
|
|
|
RegisterTask('cc10',cc10);
|
|
|
|
|
|
RegisterTask('cc11',cc11);
|
|
|
|
|
|
RegisterTask('cc12',cc12);
|
|
|
|
|
|
RegisterTask('cc13',cc13);
|
|
|
|
|
|
RegisterTask('cc14',cc14);
|
|
|
|
|
|
RegisterTask('cc15',cc15);
|
|
|
|
|
|
RegisterTask('cc16',cc16);
|
|
|
|
|
|
|
|
|
|
|
|
RegisterTask('p1',p1);
|
|
|
|
|
|
RegisterTask('p2',p2);
|
|
|
|
|
|
RegisterTask('p3',p3);
|
|
|
|
|
|
RegisterTask('p4',p4);
|
|
|
|
|
|
|
|
|
|
|
|
RegisterTask('pp1',pp1);
|
|
|
|
|
|
RegisterTask('pp2',pp2);
|
|
|
|
|
|
RegisterTask('pp3',pp3);
|
|
|
|
|
|
RegisterTask('pp4',pp4);
|
|
|
|
|
|
RegisterTask('pp5',pp5);
|
|
|
|
|
|
RegisterTask('pp6',pp6);
|
|
|
|
|
|
RegisterTask('pp7',pp7);
|
|
|
|
|
|
RegisterTask('pp8',pp8);
|
|
|
|
|
|
RegisterTask('pp9',pp9);
|
|
|
|
|
|
RegisterTask('pp10',pp10);
|
|
|
|
|
|
RegisterTask('pp11',pp11);
|
|
|
|
|
|
RegisterTask('pp12',pp12);
|
|
|
|
|
|
RegisterTask('pp13',pp13);
|
|
|
|
|
|
RegisterTask('pp14',pp14);
|
|
|
|
|
|
RegisterTask('pp15',pp15);
|
|
|
|
|
|
RegisterTask('pp16',pp16);
|
|
|
|
|
|
RegisterTask('pp17',pp17);
|
|
|
|
|
|
RegisterTask('pp18',pp18);
|
|
|
|
|
|
RegisterTask('pp19',pp19);
|
|
|
|
|
|
|
|
|
|
|
|
RegisterTask('examen1',examen1);
|
|
|
|
|
|
RegisterTask('examen2',examen2);
|
|
|
|
|
|
RegisterTask('examen3',examen3);
|
|
|
|
|
|
RegisterTask('examen4',examen4);
|
|
|
|
|
|
RegisterTask('examen5',examen5);
|
|
|
|
|
|
RegisterTask('examen6',examen6);
|
|
|
|
|
|
RegisterTask('examen7',examen7);
|
|
|
|
|
|
RegisterTask('examen8',examen8);
|
|
|
|
|
|
RegisterTask('examen9',examen9);
|
|
|
|
|
|
RegisterTask('examen10',examen10);
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure Task(name: string);
|
|
|
|
|
|
begin
|
|
|
|
|
|
name:=Trim(LowerCase(name));
|
|
|
|
|
|
if name.StartsWith('dm') then
|
|
|
|
|
|
Delete(name,1,2);
|
|
|
|
|
|
|
|
|
|
|
|
if TasksDictionary.ContainsKey(name) then
|
|
|
|
|
|
TasksDictionary[name]()
|
2015-12-28 14:25:15 +03:00
|
|
|
|
else DrawManError(name+' - нет такого задания для Чертежника','Задание отсутствует');
|
2015-05-14 22:35:07 +03:00
|
|
|
|
|
2015-12-28 14:25:15 +03:00
|
|
|
|
// Добавил - МА
|
2015-05-14 22:35:07 +03:00
|
|
|
|
DMField.TaskName := name;
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
CorrectFieldBounds;
|
|
|
|
|
|
SetTaskCall;
|
|
|
|
|
|
Stop;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
var __initialized := false;
|
|
|
|
|
|
var __finalized := false;
|
|
|
|
|
|
|
|
|
|
|
|
procedure __InitModule;
|
|
|
|
|
|
begin
|
|
|
|
|
|
RegisterTasks;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure __InitModule__;
|
|
|
|
|
|
begin
|
|
|
|
|
|
if not __initialized then
|
|
|
|
|
|
begin
|
|
|
|
|
|
__initialized := true;
|
|
|
|
|
|
DrawManField.__InitModule__;
|
|
|
|
|
|
DMZadan.__InitModule__;
|
|
|
|
|
|
DMTaskMaker.__InitModule__;
|
|
|
|
|
|
__InitModule;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
procedure __FinalizeModule__;
|
|
|
|
|
|
begin
|
|
|
|
|
|
if not __finalized then
|
|
|
|
|
|
begin
|
|
|
|
|
|
__finalized := true;
|
|
|
|
|
|
DrawManField.__FinalizeModule__;
|
|
|
|
|
|
DMZadan.__FinalizeModule__;
|
|
|
|
|
|
DMTaskMaker.__FinalizeModule__;
|
|
|
|
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
initialization
|
|
|
|
|
|
__InitModule;
|
|
|
|
|
|
end.
|