.NET

WPF TabControl, rounded TabItem

Есть замечательный пример, как сделать закладки с закруглёнными краями с помощью модификации стиля WPF TabControl и TabItem, но он не поддерживает нижнее расположение закладок TabStripPlacement=»Bottom».

Небольшая модификация примера позволила расположить закладки снизу. Загрузите Полный исходный код для VisualStudio 2010, с 3-имя вариантами TabControl и изменением стиля для нижнего расположения закладок.

Далее

Sharpmap, GDAL, OziExplorer OZF2, OZF3

Уже давно, я задумывался об одновлении Particler — программы для визуализации и рендера GPS треков на карте и для наложения GPS данных на видео. Программа требует обновления картографического движка, и новый движок должен быть open source, написан для .net или с возможностью работы с ним из .net и уметь работать как с растровыми, так и векторными данными. А также обязательно поддерживать формат OziExplorer MAP/OZF2/OZF3. Поддержка OziExplorer необходима, т.к. несмотря на широкое распространение в последние годы векторных карт, они хороши в основном для тех мест, где есть дороги, а для туристов всё же основными остаются старые, добрые карты ген. штаба.

Всем перечисленным требованиям удовлетворяет картографический движок Sharpmap. Но заставить его понимать OZF, оказалось не просто.

Далее

Terrain Viewer — MDX/SlimDX Demo

Создаём Portable версию Terrain Viewer

Теперь немного улучшим демонстрационное приложение Terrain Viewer. Эти преобразования не касаются DirectX.
Для создания переносимой или portable версии приложения, желательно, чтобы все требуемые ресурсы размещались в самом файле приложения. В тоже время мы оставим возможность приложению работать с отдельным файлом maps.xml.
Добавим минимально необходимые для работы программы внешние файлы Application.ico maps.xml Earth_Map.png default_sky.jpg default_side.png default_texture.png sample_dem.bil sample_texture.png в проект в каталог Resources и установим для них всех Build Action «Embedded Resource».

Далее

Managed DirectX, конвертация из MDX в SlimDX (3/3)

Продолжаем миграцию Managed DirectX в SlimDX framework, на примере MDX приложения Патрика Мурриса Terrain Viewer.

Как и раньше, в виде комментариев показан Managed DirectX код, и рядом с ним новый код, работающий с SlimDX.

Далее

Managed DirectX, конвертация из MDX в SlimDX (2/3)

Начинаем миграцию Managed DirectX в SlimDX framework, на примере MDX приложения Патрика Мурриса Terrain Viewer.

В виде комментариев показан Managed DirectX код, и рядом с ним новый код, работающий с SlimDX.

Далее

Сохраняем AVI файл из WPF

Собственно сохранение скриншотов WPF программы с помощью RenderTargetBitmap и BitmapEncoder не новость. Сложнее сохранить анимацию и не просто в набор картинок, а сразу в AVI файл.

Мне удалось найти только один способ сделать это, с использованием весьма старой библиотеки http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx Библиотека предназначена для работы с AVI файлами из .NET, написана на C# и работает даже на .NET 1.1.

Если вы знаете другой способ, подскажите!

Если вы хотите работать с AVI из WPF, посмотрите сразу другой пример http://blogs.msdn.com/b/saveenr/archive/2008/09/22/wpf-xaml-saving-an-animation-as-an-avi-video-file.aspx

Пример хороший, но передавать Bitmap через файл слишком накладно, лучше использовать MemoryStream.

    BmpBitmapEncoder encoder = new BmpBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));

    using (MemoryStream stream = new MemoryStream())
    {
        encoder.Save(stream);

        System.Drawing.Bitmap drawingBitmap = new System.Drawing.Bitmap(stream);
        aviStream.AddFrame(drawingBitmap);
    }

Сохранение AVI было необходимо для улучшения программы Particler, поэтому пришлось провести серию экспериментов.

Далее

Расширение KML Geometry — Circle

В стандарте KML нет геометрии круга или окружности. Небольшой пример на C#, как программно нарисовать окружность с помощью LineString (примеры на других языках есть, а вот для C# не гугляться — этот будет первый).

Далее

Managed DirectX, конвертация из MDX в SlimDX (1/3)

Как обстоят дела с использование DirectX в .NET?

MDX to SlimDX converted code sample render

Состояние дел на текущий момент:

1. Имеется «чистый» DirectX, с которым напрямую, без interop обёртки работать из .NET невозможно.

2. Не обновляемый и официально закрытый с 2006-го года проект от Microsoft — MDX (Managed DirectX). Вышла версия 1.1, версия 2.0 вышла только в бете, после чего MS прикрыло этот проект, порекомендовав разработчикам следующее:
Использовать либо чистый DirectX «для профессионалов», XNA «для энтузиастов» или XNA с отчислениями в MS если вы хотите разрабатывать сетевые игры с использованием XNA или игры под Xbox360.

3. XNA — SDK для разработки игровых 2D и 3D приложения в .NET. Включает продукт XNA Game Studio, который интегрируется с Visual Studio 2008 и позволяет вести удобную разработку с XNA. 3-я версия XNA Game Studio позволяет разрабатывать приложения под Windows, Xbox360 и Zune. А последняя, 4-я версия, на текущий момент существующая в бета версии позволит вести разработки и для Windows 7 Phone. Из недостатков — существенные изменения API от версии к версии.

Если вы разрабатываете 2D или 3D игры под эти платформы, ваш выбор — использовать XNA.

Но, что, если наша задача — не разработка игр, а некое более абстрактное использование 3D графики с перевесом в сторону «чистого» использования DirectX, но под .NET?

4. Остаётся последний путь. Open source проект SlimDX — тонкая обёртка над DirectX, обеспечивает работу с DirectX из .NET. С библиотеками SlimDX можно работать из .NET 2.0, однако без проблем эти же библиотеки можно использовать и из .NET 4.0, причём без перекомпиляции исходников SlimDX как советуют некоторые источники.

Вот именно на нём мы и остановимся (дальше о конвертации MDX кода в SlimDX).

Далее