Xpoint
   [напомнить пароль]

взаимное расположение объектов в stack'е

Метки: [без меток]
2007-09-15 06:02:33 [обр] Илья Коновалов[досье]

Имеется следующая монструозная конструкция:

<stack id="skymap-container" flex="600">
    <html:canvas id="skymap" flex="600" />
    <html:canvas id="geomap" flex="600" />
    <html:canvas id="ruler" flex="600"/>
    <svg:svg id="skymap-holder" flex="600" />
</stack>

Рисование я начинаю с того, что привожу все канвасы к одному размеру - такому же, как у stack:

var cont = document.getElementById('skymap-container');
var w = cont.boxObject.width;
var h = cont.boxObject.height;
skymap.setAttribute('width', w);
skymap.setAttribute('height', h);

Затем начинаю рисовать, причем во всех канвасах использую одну и ту же систему координат - отсчитываю от некоторой "нулевой" точки, расположенной далеко за пределами формы, клеточки. Все клеточки одинакового размера, общего для всех. В результате картинки, нарисованные в канвасах, благополучно друг на друга накладываются. Проблема возникает с svg. Нарисованный в ней квадратик не хочет стыковаться с картинками, нарисованными в канвасах, хотя используется та же самая система координат.

Как мне кажется, проблема в том, как я определяю размеры канвасов. Как можно по-человечески определить, каков реально размер того или иного объекта?

спустя 7 часов [обр] Владимир Палант(434/4445)[досье]

Вы уверены, что менять размеры вообще нужно? Размер элементов вообще-то автоматически становится равным размеру stack.

Что касается SVG, то у него ведь система координат, которая не зависит от размера элемента. Не в этом ли дело?

спустя 1 час 35 минут [обр] Илья Коновалов[досье]
Для canvas размеры менять нужно явно - хотя размер самих canvas и равен размеру stack, "внутренние размеры" отличаются. Если не делать таких манипуляций, как я описал, то изображение на canvas будет растянуто - один пиксель в canvas не всегда рисуется одним пикселем. А в SVG, как мне казалось, такие манипуляции не нужны - один пиксель в нем совпадает с одним пикселем на экране.
спустя 2 часа 31 минуту [обр] Илья Коновалов[досье]

Причина оказалась в том, что stack у меня на самом деле растягивался. Дело в том, что кроме всех этих canvas и svg в том же стеке еще были несколько label-ов. Те, которые оказывались около края, "выезжали" за пределы видимого окна, а stack.boxObject соответственно увеличивался.

Пока что все решилось засчет того, что я не подпускаю эти label'ы к краю, но хотелось бы какого-то надежного способа определения размеров видимого окна.

Powered by POEM™ Engine Copyright © 2002-2005