14 декабря 2012 г.

Создание анимации в Пре-Постпроцессоре из фалой визуализации

Пре-постпроцессор FlowVision позволяет создавать серии картинок, автоматически переключаясь между сохраненными шагами и строя преднастроенные слои визуализации. Но при работе с удаленными компьютерами, при расчете задач большой размерности или при необходимости часто сохранять слои, практичнее использовать сохранение не всех данных во всех ячейках, а только данных, необходимых для визуализации. Для этого служит опция Автосохранение слоев.

 
Картинка для привлечения внимания

Но если частота сохранения fvvis файлов (файлов с данными для визуализации) не совпадает с частотой сохранения данных расчета, то "проиграть" эту визуализацию автоматически в Пре-Постпроцессоре нельзя. Только с помощью Модуля просмотра результатов. К сожалению, Вьювер на данный момент существенно отстает по функциональности от Пре-Постпроцессора. Например, нельзя отобразить расчетную сетку или включить/отключить наложение палитры.

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



Сначала я должен предупредить, что предложенная методика повредит клиентскую часть проекта. Поэтому работайте с копией.

В скрипте есть ограничения и он не делает всю работу автоматически, кое что нужно ручками подкрутить, но этот скрипт несложно модифицировать.

Принцип работы

Нужно модифицировать клиентскую часть проекта так, чтобы Пре-Постпроцессор думал, что существуют сохранения, которых не существует. И чтобы эти сохранения совпадали с частотой сохранения fvvis файлов.

Для этого необходимо:
  1. Изменить содержимое fvproj, прописав там все несуществующие сохранени;
  2.  Наплодить fvstat файлы, соответствующие несуществующим сохранениям.

Процедура выполнения скрипта

  1. В одной папке разместить все fvvis файлы и клиентскую часть проекта
  2. Положить в эту папку скрипт fvvis.ps1 (текст скрипта приведен ниже) 
  3. Удалить все fvstat файлы, кроме нулевого
  4. В fvproj файле удалить все блоки <item> … </item> кроме нулевого
  5. Запустить скрипт
  6. Открыть появившийся файл fvproj.txt и скопировать все блоки <item> … </item> кроме нулевого. Вставить эти блоки в fvproj файл проекта после нулевого блока.
  7. Можно открывать проект в Пре-Постпроцессоре и делать анимацию.

Ограничения скрипта

  • Скрипт рассчитан на проекты, в которых было меньше 99 999 итераций (т.е. в названии fvvis файлов есть цифра меньше 99 999 )
  • В папке с проектом не допускается больше одного fvproj файла
  • Скрипт выполняется только из каталога с преоктом

Проблемы при запуске скрипта

Скрипт может не запускаться, т.к. по умолчанию в системе запрещено запускать неподписанные скрипты из файлов. Поэтому скрипт можно выполнить из оболочки PowerShell, предварительно перейдя в каталог с проектом. Либо можно снизить уровень безопасности, разрешив выполнение скриптовых неподписанных файлов. Делается это с помощью следующей команды из-под PowerShell:



Set-ExecutionPolicy Unrestricted


Содержимое скрипта

# скрипт не поддерживает более 99999 итераций
   
#получаем текущий каталог
$current_path = get-item .

#получаем список из имен fvvis файлов
$fvvis_list = Get-ChildItem "$current_path\*" -include *.fvvis -name

#получаем имя проекта и основу имени fvvis файлов
$proj_name = (get-item "$current_path\*" -include *.fvproj ).name

$proj_name = $proj_name -replace ".fvproj", ""
$fvvis_name = $proj_name+'_layerdata_'

#указываем имя файла для блоков итема
$Outfile = "fvproj.txt"

#итерируем

ForEach ($fvvis in $fvvis_list) {


# получаю номер итерации из фввиз файла
$step = $fvvis -replace "$fvvis_name",""
$step = $step -replace ".fvvis",""


#дописываем новый блок в fvproj.txt файл

$itemtxt = '    <ITEM>'
$itemtxt | out-file $Outfile -append
$itemtxt = '      <Number>'+$step+'</Number>'
$itemtxt | out-file $Outfile -append
$itemtxt = '      <Time>0.'+$step+'</Time>'
$itemtxt | out-file $Outfile -append
$itemtxt = '      <Contents>SMV</Contents>'
$itemtxt | out-file $Outfile -append
$itemtxt = '    </ITEM>'
$itemtxt | out-file $Outfile -append

#копируем нулевой fvstat с указанным номером итерации

$fvout = $proj_name + '_' + $step + '.fvstat'
$fvinp = $proj_name + '_00000.fvstat'

Copy-Item -Path $fvinp -Destination $fvout


#меняем содержимое текущего стат файла

$fvstat = Get-Content $fvout

$fvstat[1] = '<FVSTATUS UIName="VarStatus" current="0.'+$step+'" expTimeStep="0" expTimeStepFSI="0" numCells="0" timeIter="'+$step+'" timeStep="0">'
$fvstat[1]

Set-Content -path $fvout -value $fvstat

}

Комментариев нет:

Отправить комментарий