s:= FloatToStr(X_nast);
if X_nast <> 0 then s:= DobavitTochku(s);
insert(Concat('X', s), kadr, uslovie);
end;
if pos('Y',kadr) <> 0 then
begin
NaytiKoordinatu(kadr,'Y', vyh);
if oshibka <> 1 then
begin
Y_nast:= StrToFloat(vyh);
PreobrazovanieMayak(Y_nast, kadr) // небылоточки
end;
end
else
if I_est then // Добавление Y Еслинет
begin
uslovie:= FindVstavki('Y', kadr);
s:= FloatToStr(Y_nast);
if Y_nast <> 0 then s:= DobavitTochku(s);
insert(Concat('Y',s), kadr, uslovie);
end; // Подходы
if (pos('G42', kadr) <> 0) or (pos('G41', kadr) <> 0) then
begin
try
s:= Stroka.Strings[Succ(m)]; // ошибканетстрокивообще
except // так не должно быть это ошибка оператора
on EStringListError do // добавляем пустую строку и исключаем ошибку
stroka.Add('');
end;
if pos('X', kadr) = 0 then
begin // Вставка Х и Y если нет
uslovie:= FindVstavki('X', kadr);
s:= FloatToStr(X_nast); // Впозиции X Y I J F M
if X_nast <> 0 then s:= DobavitTochku(s);
Insert('X' + s, kadr, uslovie);
end;
if pos('Y', kadr) = 0 then
begin
uslovie:= FindVstavki('Y', kadr);
s:= FloatToStr(Y_nast);
if Y_nast <> 0 then s:= DobavitTochku(s);
Insert('Y' + s, kadr, uslovie);
end;
if (pos('I', Stroka.Strings[Succ(m)]) <> 0) and (pos('J', Stroka.Strings[Succ(m)]) <> 0)
then
begin
Naytikoordinatu(Stroka.Strings[Succ(m)], 'I', st);
I:= StrToFloat(st);
Naytikoordinatu(Stroka.Strings[Succ(m)], 'J', st);
J:= StrToFloat(st);
Podhod_G41_G42_radius;
J:= J + Y_nast;
if (I_sled = -1) and (J > 0) then J:= -J; // ЛОГИЧЕСКИЙПЕРЕСЧЁТ
if (I_sled = 1) and (J < 0) then J:= -J;
I:= I + X_nast;
if(J_sled = -1) and (I > 0) then I:= -I;
if(J_sled = 1) and (I < 0) then I:= -I;
if pos('J', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'J', st);
PreobrazovanieMayak(I, kadr);
end
else
begin
uslovie:= FindVstavki('J', kadr);
Insert('J' + FloatToStr(I), kadr, uslovie);
end;
if pos('I', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'I', st);
PreobrazovanieMayak(J, kadr);
end
else
begin
uslovie:= FindVstavki('I', kadr);
Insert('I' + FloatToStr(J), kadr, uslovie);
end;
X_pred:= X_nast;
Y_pred:= Y_nast;
exit;
end
else
begin
Podhod_G41_G42_line; // ЛИНЕЙНЫЕПОДХОДЫРАСЧЁТ
if pos('I', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'I', st);
PreobrazovanieMayak(X_sled, kadr);
end
else
begin
uslovie:= FindVstavki('I', kadr);
Insert('I' + FloatToStr(X_sled) + '.', kadr, uslovie);
end;
if pos('J', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'J', st);
PreobrazovanieMayak(Y_sled, kadr);
end
else
begin
uslovie:= FindVstavki('J', kadr);
Insert('J' + FloatToStr(Y_sled) + '.', kadr, uslovie);
end;
exit;
end;
end;
uslovie:= pos('I',kadr); // расчётрадиусов
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'I',vyh);
if oshibka = 1 then
else
begin
I:= StrToFloat(vyh);
I:= X_pred + I;
preobrazovanieMAYAK(I,kadr);
end;
end;
uslovie:= pos('J',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'J',vyh);
if oshibka = 1 then
else
begin
J:= StrToFloat(vyh);
J:= Y_pred + J;
preobrazovanieMAYAK(J,kadr);
end;
end;
X_pred:= X_nast;
Y_pred:= Y_nast;
end;
Function VM_MAYAK(var kadr: string): string;
var
I_est: boolean;
s, st: string;
begin
if (pos('%', kadr) <> 0) or (pos('$', kadr) <> 0) then exit;
I_est:= False;
if (pos('I',kadr) <> 0) or (pos('J',kadr) <> 0) then I_est:= true;
uslovie:= pos('X',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'X', vyh);
if oshibka = 1 then
else
begin
vyh:= TrimRight(vyh); // Удаляемлишниепробелысправа
X_nast:= StrToFloat(vyh) / 1000;
preobrazovanieMAYAK(X_nast,kadr);
end;
end
else
if I_est = true then // ДобавлениеХЕслинет
begin
uslovie:= pos('Y',kadr);
insert('X'+ vyh, kadr, uslovie);
end;
uslovie:= pos('Y',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'Y', vyh);
if oshibka = 1 then
else
begin
vyh:= TrimRight(vyh); // Удаляемлишниепробелысправа
Y_nast:= StrToFloat(vyh) / 1000;
preobrazovanieMAYAK(Y_nast,kadr);
end;
end
else
if I_est = true then // Добавление Y Еслинет
begin
uslovie:= pos('I',kadr);
insert('Y' + vyh, kadr, uslovie);
end;
if (pos('G42', kadr) <> 0) or (pos('G41', kadr) <> 0) then
begin
try
s:= Stroka.Strings[Succ(m)]; // ошибканетстрокивообще
except
on EStringListError do // добавляемпустуюстрокуиисключаемошибку
stroka.Add('');
end;
if pos('X', kadr) = 0 then
begin // Вставка Х и Y если нет
uslovie:= FindVstavki('X', kadr);
s:= FloatToStr(X_nast); // Впозиции X Y I J F M
if X_nast <> 0 then s:= DobavitTochku(s);
Insert('X' + s, kadr, uslovie);
end;
if pos('Y', kadr) = 0 then
begin
uslovie:= FindVstavki('Y', kadr);
s:= FloatToStr(Y_nast);
if Y_nast <> 0 then s:= DobavitTochku(s);
Insert('Y' + s, kadr, uslovie);
end;
if (pos('I', Stroka.Strings[Succ(m)]) <> 0) and (pos('J', Stroka.Strings[Succ(m)]) <> 0)
then
begin
Naytikoordinatu(Stroka.Strings[Succ(m)], 'I', st);
I:= StrToFloat(st);
Naytikoordinatu(Stroka.Strings[Succ(m)], 'J', st);
J:= StrToFloat(st);
Podhod_G41_G42_radius;
J:= J / 1000;
J:= J + Y_nast;
if (I_sled = -1) and (J > 0) then J:= -J;
if (I_sled = 1) and (J < 0) then J:= -J;
I:= I / 1000;
I:= I + X_nast;
if(J_sled = -1) and (I > 0) then I:= -I;
if(J_sled = 1) and (I < 0) then I:= -I;
if pos('J', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'J', st);
PreobrazovanieMayak(I, kadr);
end
else
begin
uslovie:= FindVstavki('J', kadr);
Insert('J' + FloatToStr(I), kadr, uslovie);
end;
if pos('I', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'I', st);
PreobrazovanieMayak(J, kadr);
end
else
begin
uslovie:= FindVstavki('I', kadr);
Insert('I' + FloatToStr(J), kadr, uslovie);
end;
X_pred:= X_nast;
Y_pred:= Y_nast;
exit;
end
else
begin // Линейныйподход
st:= Stroka.Strings[Succ(m)];
uslovie:= Pos('X', st);
if uslovie <> 0 then
begin
NaytiKoordinatu(st, 'X', st);
X_sled:= StrToFloat(st) / 1000;
X_sled:= X_sled - X_nast;
end
else X_sled:= 0; // Если нет в кадре то 0
st:= stroka.Strings[Succ(m)];
uslovie:= Pos('Y', st);
if uslovie <> 0 then
begin
NaytiKoordinatu(st, 'Y', st);
Y_sled:= StrToFloat(st) / 1000;
Y_sled:= Y_sled - Y_nast;
end
else Y_sled:= 0;
if pos('I', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'I', st);
PreobrazovanieMayak(X_sled, kadr);
end
else
begin
uslovie:= FindVstavki('I', kadr);
Insert('I' + FloatToStr(X_sled) + '.', kadr, uslovie);
end;
if pos('J', kadr) <> 0 then
begin
NaytiKoordinatu(kadr, 'J', st);
PreobrazovanieMayak(Y_sled, kadr);
end
else
begin
uslovie:= FindVstavki('J', kadr);
Insert('J' + FloatToStr(Y_sled) + '.', kadr, uslovie);
end;
exit;
end;
end;
uslovie:= pos('Z',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'Z', vyh);
if oshibka = 1 then
else
begin
vyh:= TrimRight(vyh); // Удаляемлишниепробелысправа
Z:= StrToFloat(vyh) / 1000;
preobrazovanieMAYAK(Z,kadr);
end;
end;
uslovie:= pos('I',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'I',vyh);
if oshibka = 1 then
else
begin
vyh:= TrimRight(vyh); // Удаляемлишниепробелысправа
I:= StrToFloat(vyh) / 1000;
I:= X_pred + I;
preobrazovanieMAYAK(I,kadr);
end;
end;
uslovie:= pos('J',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'J',vyh);
if oshibka = 1 then
else
begin
vyh:= TrimRight(vyh); // Удаляемлишниепробелысправа
J:= StrToFloat(vyh) / 1000;
J:= Y_Pred + J;
preobrazovanieMAYAK(J,kadr);
end;
end;
uslovie:= pos('U',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'U', vyh);
if oshibka = 1 then
else
begin
vyh:= TrimRight(vyh); // Удаляемлишниепробелысправа
Uvmmayak:= StrToFloat(vyh) / 1000;
preobrazovanieMAYAK(Uvmmayak,kadr);
end;
end;
uslovie:= pos('K',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'K', vyh);
if oshibka = 1 then
else
begin
vyh:= TrimRight(vyh); // Удаляемлишниепробелысправа
K:= StrToFloat(vyh) / 1000;
preobrazovanieMAYAK(K,kadr);
end;
end;
X_pred:= X_nast;
Y_pred:= Y_nast;
end;
Function MAYAK_VM(var kadr: string): string;
var
I_est: boolean;
uslovie: integer;
strok: string[10];
s, st: string;
begin
if pos('%', kadr) <> 0 then exit;
if pos('$', kadr) <> 0 then exit;
I_est:= False;
uslovie:= pos('I',kadr);
if uslovie <> 0 then I_est:= true;
uslovie:= pos('X',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'X',vyh);
if oshibka = 1 then
else
begin
X_nast:= StrToFloat(vyh) * 1000;
X_nast:= Int(X_nast); // Отбрасываем дробную часть
preobrazovanieVM(X_nast,kadr);
end;
end
else
if I_est then
begin
uslovie:= pos('Y',kadr);
strok:= FloatToStr(X_pred); // Преобразуем в число строку
insert('X' + strok, kadr, uslovie);
end;
uslovie:= pos('Y',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'Y',vyh);
if oshibka = 1 then
else
begin
Y_nast:= StrToFloat(vyh) * 1000;
Y_nast:= Int(Y_nast); // Отбрасываемдробнуючасть
preobrazovanieVM(Y_nast,kadr);
end;
end
else
if I_est then
begin
uslovie:= pos('I',kadr);
strok:= FloatToStr(Y_pred); // Преобразуем в число строку
insert('Y' + strok, kadr, uslovie);
end;
if (pos('G42', kadr) <> 0) or (pos('G41', kadr) <> 0) then
begin
try
s:= Stroka.Strings[Succ(m)]; // ошибканетстрокивообще
except
on EStringListError do // добавляемпустуюстрокуиисключаемошибку
stroka.Add('');
end;
if pos('X', kadr) = 0 then
begin // Вставка Х и Y если нет
uslovie:= FindVstavki('X', kadr); // Впозиции X Y I J F M
Insert('X' + FloatToStr(X_nast), kadr, uslovie);
end;
if pos('Y', kadr) = 0 then
begin
uslovie:= FindVstavki('Y', kadr);
Insert('Y' + FloatToStr(Y_nast), kadr, uslovie);
end;
if (pos('I', Stroka.Strings[Succ(m)]) <> 0) and (pos('J', Stroka.Strings[Succ(m)]) <> 0)
then
begin
Naytikoordinatu(Stroka.Strings[Succ(m)], 'I', st);
I:= StrToFloat(st);
Naytikoordinatu(Stroka.Strings[Succ(m)], 'J', st);
J:= StrToFloat(st);
J:= J * 1000;
I:= I * 1000;
I:= I - X_nast;
J:= J - Y_nast;
Podhod_G41_G42_radius;
if (I_sled = -1) and (J > 0) then J:= -J;
if (I_sled = 1) and (J < 0) then J:= -J;
if(J_sled = -1) and (I > 0) then I:= -I;
if(J_sled = 1) and (I < 0) then I:= -I;
if pos('J', kadr) <> 0
then
begin
NaytiKoordinatu(kadr, 'J', st);
PreobrazovanieVM(I, kadr);
end
else
begin
uslovie:= FindVstavki('J', kadr);
Insert('J' + FloatToStr(I), kadr, uslovie);
end;
if pos('I', kadr) <> 0
then
begin
NaytiKoordinatu(kadr, 'I', st);
PreobrazovanieVM(J, kadr);
end
else
begin
uslovie:= FindVstavki('I', kadr);
Insert('I' + FloatToStr(J), kadr, uslovie);
end;
X_pred:= X_nast;
Y_pred:= Y_nast;
exit;
end
else
begin
Podhod_G41_G42_line;
if pos('I', kadr) <> 0
then
begin
NaytiKoordinatu(kadr, 'I', st);
PreobrazovanieVM(X_sled, kadr);
end
else
begin
uslovie:= FindVstavki('I', kadr);
Insert('I' + FloatToStr(X_sled), kadr, uslovie);
end;
if pos('J', kadr) <> 0
then
begin
NaytiKoordinatu(kadr, 'J', st);
PreobrazovanieVM(Y_sled, kadr);
end
else
begin
uslovie:= FindVstavki('J', kadr);
Insert('J' + FloatToStr(Y_sled), kadr, uslovie);
end;
exit;
end;
end;
uslovie:= pos('I',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'I',vyh);
if oshibka = 1 then
else
begin
I:= StrToFloat(vyh) * 1000;
I:= Int(I); // Отбрасываем дробную часть
I:= I - X_pred;
preobrazovanieVM(I,kadr);
end;
end;
uslovie:= pos('J',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'J',vyh);
if oshibka = 1 then
else
begin
J:= StrToFloat(vyh) * 1000;
J:= Int(J); // Отбрасываем дробную часть
J:= J - Y_pred;
preobrazovanieVM(J,kadr);
end;
end;
uslovie:= pos('Z',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'Z',vyh);
if oshibka = 1 then
else
begin
Z:= StrToFloat(vyh) * 1000;
Z:= Int(Z); // Отбрасываем дробную часть
preobrazovanieVM(Z,kadr);
end;
end;
uslovie:= pos('A',kadr);
if uslovie <> 0 then
begin
NaytiKoordinatu(kadr,'A',vyh);
if oshibka = 1 then
else
begin
A:= StrToFloat(vyh) * 1000;
A:= Int(A); // Отбрасываем дробную часть
preobrazovanieVM(A,kadr);
Delete(kadr, uslovie, 1);