SASGIS - SAS.Планета
View Issue Details
0001745SAS.Планета[All Projects] Хотелкаpublic27-12-2012 09:0203-01-2013 05:47
TokarevVV 
zed 
normalminorhave not tried
resolvedfixed 
110418 
131111131111 
0001745: Добавить новые функции в PascalScript zmp
Не плохо бы в Паскаль-скрипт добавить функции:

function Ceil(X :Extended) :Longint;
function Floor(X :Extended) :Longint;
function Log2(X :Extended) :Extended;
function Max(A, B :Integer) :Integer; overload;
function Max(A, B :Extended) :Extended; overload;
function Min(A, B :Integer) :Integer; overload;
function Min(A, B :Extended) :Extended; overload;

Это дало бы возможность улучшить и сократить скрипты считывания карт.

Пример 1:
Процедура, применённая в zoomify.zmp:

procedure GetMaxZoom();
var k, i :Longint;
begin
    k := m_nWidth;
    if m_nHeight > m_nWidth then k := m_nHeight;

    i := 0;
    while k > 256 do
    begin
        k := Trunc(k / 2);
        Inc(i);
    end;
    nMaxZoom := i;
end;

сократилась бы до:

procedure GetMaxZoom();
begin
    nMaxZoom := Ceil(Log2(Max(m_nWidth, m_nHeight)) - 8;
end;

Пример 2:
В zoomify.zmp:
Выражение Trunc(Ceil(X)) можно сократить до Ceil(X).
PascalScript, zmp, паскальскрипт
related to 0001740resolved Tolik Доработка карты (ZMP) Ошибка в Zoomify.zmp 
Issue History
27-12-2012 09:02TokarevVVNew Issue
27-12-2012 09:30TokarevVVNote Added: 0010232
27-12-2012 19:18vdemidovStatusnew => confirmed
27-12-2012 19:18vdemidovProduct Version => 110418
27-12-2012 19:18vdemidovTarget Version => 24xxxx
27-12-2012 19:19vdemidovSummaryНовые функции Паскаль-скрипта => Добавить новые функции в PascalScript zmp
27-12-2012 19:19vdemidovTag Attached: паскальскрипт
27-12-2012 19:19vdemidovTag Attached: PascalScript
27-12-2012 19:19vdemidovTag Attached: zmp
02-01-2013 18:44zedNote Added: 0010308
03-01-2013 05:47vdemidovStatusconfirmed => resolved
03-01-2013 05:47vdemidovFixed in Version => 131111
03-01-2013 05:47vdemidovResolutionopen => fixed
03-01-2013 05:47vdemidovAssigned To => vdemidov
03-01-2013 05:47vdemidovAssigned Tovdemidov => zed
03-01-2013 05:47vdemidovTarget Version24xxxx => 131111
03-01-2013 09:52zedRelationship addedrelated to 0001740

Notes
(0010232)
TokarevVV   
27-12-2012 09:30   
В примере 1 досадная ошибка. Надо:

procedure GetMaxZoom();
begin
    nMaxZoom := Ceil(Log2(Max(m_nWidth, m_nHeight)) - 8;
    if nMaxZoom < 0 then nMaxZoom := 0;
end;
(0010308)
zed   
02-01-2013 18:44   
К сожалению, перегруженных функций сделать не получится, поэтому пришлось слегка поменять имена. Теперь должны быть доступны функции:

function Ceil(const X: Extended): Integer;
function Floor(const X: Extended): Integer;
function Log2(const X: Extended): Extended;
function Max(const A, B: Integer): Integer;
function MaxExt(const A, B: Extended): Extended; // <-- (!)
function Min(const A, B: Integer): Integer;
function MinExt(const A, B: Extended): Extended; // <-- (!)

Проверяйте в завтрашней ночнушке.