как позиционировать Geomerty внутри GeometryGroup
От: okon  
Дата: 28.05.19 10:36
Оценка:
Ожидалось что такой пример будет работать, но трансформация не применяется, все тайлы выводятся в одних координатах 0,0.
Как правильно в этом случае сделать трансформацию ?


GeometryGroup  GetTiledGeometry(Geometry geometry, int tileX, int tileY, double sizeX, double sizeY)
{
    var group = new GeometryGroup();
    for(int x = 0; x < tileX; x++)
       for(int y = 0; y < tileY; y++)
        {
           var geometryTile = geometry.Clone();
           geometryTile.Transform.Transform(new Point(x * sizeX, y * sizeY ));  
        }
 
   return group;
}
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re: как позиционировать Geomerty внутри GeometryGroup
От: pugv Россия  
Дата: 29.05.19 09:13
Оценка:
GeometryGroup  GetTiledGeometry(Geometry geometry, int tileX, int tileY, double sizeX, double sizeY)
{
    var group = new GeometryGroup();
    
    /* Вроде так ничего не изменится ;)
    for(int x = 0; x < tileX; x++)
        for(int y = 0; y < tileY; y++)
        {
            var geometryTile = geometry.Clone();
            geometryTile.Transform.Transform(new Point(x * sizeX, y * sizeY ));  
        }
    */
 
    return group;
}
Re: как позиционировать Geomerty внутри GeometryGroup
От: anatolym  
Дата: 29.05.19 11:08
Оценка: 4 (1)
Здравствуйте, okon, Вы писали:

O>Ожидалось что такой пример будет работать, но трансформация не применяется, все тайлы выводятся в одних координатах 0,0.

O>Как правильно в этом случае сделать трансформацию ?


O>
O>GeometryGroup  GetTiledGeometry(Geometry geometry, int tileX, int tileY, double sizeX, double sizeY)
O>{
O>    var group = new GeometryGroup();
O>    for(int x = 0; x < tileX; x++)
O>       for(int y = 0; y < tileY; y++)
O>        {
O>           var geometryTile = geometry.Clone();
O>           //geometryTile.Transform.Transform(new Point(x * sizeX, y * sizeY ));  
                    geometryTile.Transform = new TranslateTransform(x * sizeX, y * sizeY);

O>        }
 
O>   return group;
O>}


O>


Думаю так, но не проверял. Если не заработает, то могу исправить на рабочую версию

Ибо в закомментированном фрагменте просто выполняется преобразование входных координат. Сама трансформация не меняется.
Отредактировано 29.05.2019 11:10 anatolym . Предыдущая версия .
Re[2]: как позиционировать Geomerty внутри GeometryGroup
От: okon  
Дата: 29.05.19 11:29
Оценка:
A>Думаю так, но не проверял. Если не заработает, то могу исправить на рабочую версию
A>Ибо в закомментированном фрагменте просто выполняется преобразование входных координат. Сама трансформация не меняется.

Да, похоже на то, пока это сделал по другому через трансформацию в OnRender( . )
...
drawingContext.PushTransform(GetTransform(x,y));
drawingContext.DrawGeometry( ... );
drawingContext.Pop();
...


Единственное что пока смущает — в профайлере больше всего времени занимает Layout в несколько раз больше чем Render, и растет от количества тайлов по X,Y.
Хотя у данного элемента по тому же профайлеру нет дерева как логического так и визуального.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.