Задача: были созданы несколько трубопроводов (PIPE), однако не задавался атрибут Bore (диаметр). В именовании трубопроводов присутствует обозначение диаметра, в качестве первого блока (до знака минус), например /100-B-1 (здесь 100 - основной диаметр линии). Необходимо найти диаметр по части имени и присвоить это значение атрибуту Bore элемента Pipe. Вторая часть задачи: добавить найденные элементы на экран и задать временный цвет согласно схеме
Диаметр-цвет: 40-BLUE,80-RED,100-GREEN,150-YELLOW,200-GREY,250-DARKBROWN
Решение: делаем запросы к базе на предмет нахождения элементов типа PIPE, далее запускаем
цикл, в цикле обрабатываем каждый элемент на предмет нахождения диаметр (функция .Before(), .After()), присвоения атрибута Bore в найденное значение, учитывая что это должно быть число, вывод на экран и раскраской согласно указанной фильтрации
VAR !pipes COLLECT ALL PIPE FOR CE
do !x from 1 to !pipes.Size()
--находим диаметр из имени, сначал преварительно превратив элемент массива в объект
--и обработав его атрибут Name
!boreS = !pipes[!x].Dbref().Name.Before('-').After('/')
--превращаем найденное значение в объект типа BORE
--пропуская элемент, если конвертация невозможна
!boreB = OBJECT BORE(!boreS)
HANDLE ANY
SKIP
ENDHANDLE
--задаем атрибут через обращение к объекту массива
!pipes[!x].Dbref().Bore = !boreB
--вычисляем нужный цвет
if (!boreS EQ '40') then
!colour = 'BLUE'
elseif (!boreS EQ '80') then
!colour = 'RED'
elseif (!boreS EQ '100') then
!colour = 'GREEN'
elseif (!boreS EQ '150') then
!colour = 'YELLOW'
elseif (!boreS EQ '200') then
!colour = 'GREY'
elseif (!boreS EQ '250') then
!colour = 'DARKBROWN'
else
!colour = 'WHITE'
endif
--добавляем элемент
ADD $!pipes[$!x]
--раскрашиваем
ENHANCE $!pipes[$!x] COLOUR $!colour
enddo
--далее следует набор команд для выполнения операции
--Walk to drawlist (центрирование всех объектов экрана)
var !collection COLLECT ALL FROM DRAWLIST
!block = OBJECT BLOCK('!collection[!evalindex].dbref()')
!list = !collection.evaluate(!block)
!volume = object volume(!list)
!lim = OBJECT GPHVIEWS()
!lim.limits(!!gph3ddesign1.view, !volume)
Работу примера можно проверить на проекте SAM
Диаметр-цвет: 40-BLUE,80-RED,100-GREEN,150-YELLOW,200-GREY,250-DARKBROWN
Решение: делаем запросы к базе на предмет нахождения элементов типа PIPE, далее запускаем
цикл, в цикле обрабатываем каждый элемент на предмет нахождения диаметр (функция .Before(), .After()), присвоения атрибута Bore в найденное значение, учитывая что это должно быть число, вывод на экран и раскраской согласно указанной фильтрации
VAR !pipes COLLECT ALL PIPE FOR CE
do !x from 1 to !pipes.Size()
--находим диаметр из имени, сначал преварительно превратив элемент массива в объект
--и обработав его атрибут Name
!boreS = !pipes[!x].Dbref().Name.Before('-').After('/')
--превращаем найденное значение в объект типа BORE
--пропуская элемент, если конвертация невозможна
!boreB = OBJECT BORE(!boreS)
HANDLE ANY
SKIP
ENDHANDLE
--задаем атрибут через обращение к объекту массива
!pipes[!x].Dbref().Bore = !boreB
--вычисляем нужный цвет
if (!boreS EQ '40') then
!colour = 'BLUE'
elseif (!boreS EQ '80') then
!colour = 'RED'
elseif (!boreS EQ '100') then
!colour = 'GREEN'
elseif (!boreS EQ '150') then
!colour = 'YELLOW'
elseif (!boreS EQ '200') then
!colour = 'GREY'
elseif (!boreS EQ '250') then
!colour = 'DARKBROWN'
else
!colour = 'WHITE'
endif
--добавляем элемент
ADD $!pipes[$!x]
--раскрашиваем
ENHANCE $!pipes[$!x] COLOUR $!colour
enddo
--далее следует набор команд для выполнения операции
--Walk to drawlist (центрирование всех объектов экрана)
var !collection COLLECT ALL FROM DRAWLIST
!block = OBJECT BLOCK('!collection[!evalindex].dbref()')
!list = !collection.evaluate(!block)
!volume = object volume(!list)
!lim = OBJECT GPHVIEWS()
!lim.limits(!!gph3ddesign1.view, !volume)
Работу примера можно проверить на проекте SAM
0 коммент.:
Отправить комментарий