Рассмотрим задачу вывода объемов материалов из расчетной схемы.
Для решения данной задачи можно воспользоваться системой "Пользовательские результаты"
1. Выполните расчет, перейдите на вкладку результаты. Создайте таблицу элементов для всех или только для выделенных.
2. Добавьте столбец «Объем».
3. Для автоматического заполнения данного столбца предварительно сделаем экспорт таблицы в формат CSV.
4. Переход к пользовательским результатам
5. Создадим скрипт для вычисления объемов стержневых элементов
6. В окно метод вычисления вставляем следующий скрипт:
Код |
---|
{
//
////
////////
string pathLog = @"B:\Таблица элементов.csv"; //путь к файлу (задает пользователь)
////////
////
//
string[] arrLine = System.IO.File.ReadAllLines(pathLog, System.Text.Encoding.GetEncoding("windows-1251"));//чтение файла
int[] ColumnName = ColumnVolumeNumber (arrLine[0]); //определяем подписи столбцов
//основной блок
for (int i = 1; i<arrLine.Length; i++)
{
string[] strs;
//массив для хранения строки
strs = arrLine[i].Split(new char[] { ';' }); //запись строки в массив
if (Convert.ToInt32(strs[0])==(Int32)Number && strs[ColumnName[0]]!=string.Empty && ColumnName[0]!=0) //если текущий элемент стержень
{double SectionArea = SectionA; //площадь поперечного сечения
double LengthElement = Convert.ToDouble(strs[ColumnName[0]]); //длина элемента
double Volume = System.Math.Round(LengthElement*SectionArea, 3); //объем элемента
strs[ColumnName[2]]=Volume.ToString(); //запись объема в строку
arrLine[i]=combineLine(strs); //обновление строки в общем массиве
}
}
System.IO.File.WriteAllLines(pathLog, arrLine, System.Text.Encoding.GetEncoding("windows-1251"));
return (Int32)Number; //вывод номеров элементов
}
//поиск номера столбца с подписями
int[] ColumnVolumeNumber (string line)
{
string[] firstLine = line.Split(new char[] { ';' }); //запись строки в массив
int[] Columns = { 0, 0, 0 }; //массив для хранения столбцов - длина,площадь,объем
for (int i = 0; i<firstLine.Length; i++)
{
if (firstLine[i]=="Длина (м)") //если найден столбец длина
{
Columns[0]=i; //номер столбца с длиной
}
if (firstLine[i]=="Площадь (м^2)") //если найден столбец площадь
{
Columns[1]=i; //номер столбца с площадью
}
if (firstLine[i]=="Объем (м^3)") //если найден столбец объем
{
Columns[2]=i; //номер столбца с объемом
}
}
return Columns;
}
//сборка массива в строку
string combineLine (string[] baseMassive)
{
string combiLine = string.Empty;
for (int i = 0; i<baseMassive.Length; i++)
{
combiLine = combiLine+baseMassive[i]+";";
}
return combiLine;
} |
В отмеченной строке указываем путь к файлу, который мы ранее экспортировали.
7. Аналогично создаем скрипт для обработки пластинчатых элементов и запускаем скрипт.
8. В результате работы скрипта будет заполнен столбец "Объем" в ранее экспортированном файле *.csv