Автоматизированное редактирование частиц в компьютерной графике
6.2.2 Определение объема ПС
Объем ПС определяется путем подбора аналогов на основании классификации типов ПС, каталога функции ПС и аналогов ПС в разрезе функций.
Таблица 6.2 - Содержание и объем функций на разрабатываемое ПС ВТ
Функция
|
Объем, условных машинных команд
|
|
Работа с файлами характеристик систем частиц, файлами изображений
|
1100
|
|
Организация ввода характеристик систем частиц пользователем
|
1020
|
|
Организация ввода управляющих сигналов от пользователя
|
700
|
|
Организация вывода графической информации в режиме реального времени
|
1150
|
|
Прочие расчёты, сервисные функции
|
700
|
|
Справка и обучение
|
520
|
|
Итого
|
5190
|
|
|
На основании информации о функциях разрабатываемого ПС по каталогу функций определяется объем функций. Общий объем ПС рассчитывается по формуле:
, (6.1)
где Vо - общий объем ПС, условных машино-команд;
Vi - объем функций ПС, условных машино-команд;
n - общее число функций.
= 5190 условных машинных команд
С учетом изменения скорости обработки информации рассчитывается скорректированный объем функций:
Vo/ = Vo · Кск , (6.2)
где - скорректированный объем ПС, условных машинных команд;
- общий объем ПС, условных машинных команд;
Кск - коэффициент изменения скорости обработки информации.
Vo/ = 5190*0,7 = 3633 условных машинных команд
6.2.3 Расчет трудоемкости выполняемой работы
На основании общего объема ПС определяется нормативная трудоемкость. Нормативная трудоемкость устанавливается с учетом сложности ПС. Выделяется три группы сложности, в которых учтены следующие составляющие ПС; языковой интерфейса, ввод-вывод, организация данных, режим работы, операционная и техническая среда.
Общая трудоемкость ПС рассчитывается по формуле:
, (6.3)
где То - общая трудоемкость ПС, человеко-дней;
Тн - нормативная трудоемкость ПС, человеко-дней;
Ксл - дополнительный коэффициент сложности ПС, ед.
Уровень сложности = 1, КСЛ = 0,18, норма времени Тн = 112. Получаем:
То= 112 * 0,7 *0,18 = 14 человеко-дней
6.2.4 Расчет основной заработной платы
Нормативная трудоемкость служит базой для расчета основной заработной платы.
В соответствии с “Рекомендациями по применению “Единой тарифной сетки” рабочих и служащих народного хозяйства” и тарифными разрядами и коэффициентами должностей руководителей организаций и вычислительных центров, бюджетных учреждений науки непроизводственных отраслей народного хозяйства каждому исполнителю устанавливается разряд и тарифный коэффициент.
Месячная тарифная ставка каждого исполнителя определяется путем умножения действующей месячной тарифной ставки 1-го разряда на тарифный коэффициент, соответствующий установленному тарифному разряду:
Сзм = Сзм1 . Кт , (6.4)
где Сзм - тарифная ставка за месяц, руб.;
Сзм1 - тарифная ставка 1-го разряда за месяц, руб.;
Кт - тарифный коэффициент, ед.
Сзм = 77000*2,84 = 218680 руб.
Основная заработная плата исполнителей на конкретное ПС рассчитывается по формуле:
(6.5)
где Соз- основная заработная плата, руб.;
Сзд - тарифная ставка за день, руб.;
То - общая трудоемкость ПС, человеко-дней;
Кп - коэффициент естественных потерь рабочего времени, ед.;
Кпр - коэффициент премирования, ед.
Соз = (218680 / 21,25)*14*1,4*1 = 201700 руб.
6.2.5 Расчет дополнительной заработной платы
Дополнительная заработная плата на конкретное ПС включает выплаты, предусмотренные законодательством о труде (оплата отпусков, льготных часов, времени выполнения государственных обязанностей и других выплат, не связанных с основной деятельностью исполнителей), и определяется по нормативу в процентах к основной заработной плате:
, (6.6)
где Сдз - дополнительная заработная плата на конкретное ПС, руб.;
Ндз - норматив дополнительной заработной платы, %.
Cдз = 201700 * 0,1 = 20170 руб.
6.2.6 Расчет отчислений в Фонд социальной защиты населения
Отчисления в фонд социальной защиты населения определяются в соответствии с действующими законодательными актами по нормативу в процентном отношении к фонду основной и дополнительной зарплаты исполнителей, определенной по нормативу, установленному в целом по организации:
, (6.7)
где Сфсзн - сумма отчислений в Фонд социальной защиты населения, руб.;
Нфсзн - норматив отчислений в Фонд социальной защиты населения, %.
Cфсзн = (201700 + 20170) * 0,34 = 75436 руб.
6.2.7 Расчет отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний
Отчисления по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний рассчитываются по формуле:
, (6.8)
где Сбгс - сумма отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний, руб.;
Нбгс - норматив отчислений по обязательному страхованию от несчастных случаев на производстве и профессиональных заболеваний, %.
Сбгс = (201700 + 20170)*0,01 = 2219 руб.
6.2.8 Расчет расходов на материалы и комплектующие
По статье “Материалы” отражаются расходы на магнитные носители, бумагу, красящие ленты и другие материалы, необходимые для разработки ПС. Нормы расхода материалов в суммарном выражении определяются в расчете на 100 строк исходного кода. Сумма затрат материалов рассчитывается по формуле:
, (6.9)
где См - сумма расходов на материалы, руб.;
Нм - норма расхода материалов в расчете на 100 строк исходного кода ПС, руб.
См = 380*0,7*3633/100 = 9664 руб.
6.2.9 Расчет расходов на оплату машинного времени
Расходы по статье “Машинное время” включают оплату машинного времени, необходимого для разработки и отладки ПС, которое определяется по нормативам (в машино-часах) на 100 строк исходного кода машинного времени в зависимости от характера решаемых задач и типа ПК:
, (6.10)
где Смв - сумма расходов на оплату машинного времени, руб.;
Цм - цена одного машино-часа, руб.;
Нмв - норматив расхода машинного времени на отладку 100 строк исходного кода, машино-часов.
Смв = 2200*3633/100*12*0,6 = 575467 руб.
6.2.10 Расчет прочих прямых затрат
Расходы на конкретное ПС включают затраты на приобретение и подготовку специальной научно-технической информации и специальной литературы. Определяются по нормативу в процентах к основной заработной плате:
, (6.11)
где Спз - сумма прочих затрат, руб.;
Нпз - норматив прочих затрат в целом по организации, %.
Спз = 201700*12/100 = 24204 руб.
6.2.11 Расчет накладных расходов
Данные затраты, связанные с необходимостью содержания аппарата управления, а также с расходами на общехозяйственные нужды, рассчитываются для конкретного ПС по нормативу в процентном отношении к основной заработной плате исполнителей:
, (6.12)
где Снр - сумма накладных расходов, руб.;
Ннр - норматив накладных расходов в целом по организации, %.
6.2.12 Расчет суммы расходов на разработку ПС ВТ
Общая сумма расходов на ПС рассчитывается по формуле:
, (6.13)
где Ср - сумма расходов на разработку ПС ВТ, руб.;
Ср = 201700 + 20170 + 75436 + 2219 + 9664 + 0 + 575467 + 24204 + 242040 = 1150900 руб.
6.2.13 Расчет расходов на сопровождение и адаптацию
Кроме того, организация-разработчик осуществляет затраты на сопровождение и адаптацию ПС, которые определяются по нормативу:
, (6.14)
где Срса - сумма расходов на сопровождение и адаптацию ПС ВТ, руб.;
Нрса - норматив расходов на сопровождение и адаптацию, %.
Срса = 1150900 * 10/100 = 115090 руб.
6.2.14 Расчет полной себестоимости разработки ПС ВТ
Общая сумма расходов на разработку (с затратами на сопровождение и адаптацию) - полная себестоимость ПС - определяется по формуле:
,(6.15)
Сп = 1150900 + 115090 = 1265990 руб.
6.2.15 Определение отпускной цены на ПС ВТ
Отпускная цена определяется на основании цены разработчика, которая формируется на основе показателя рентабельности продукции. Рентабельность и прибыль по создаваемому ПС определяются исходя из результатов анализа рыночных условий, переговоров с заказчиком (потребителем) и согласования с ним отпускной цены, включающей дополнительно налог на добавленную стоимость и отчисления в целевые бюджетные фонды из выручки от реализации продукции.
Прибыль рассчитывается по формуле:
, (6.16)
где Ппс - прибыль от реализации ПС, руб.;
Урп - уровень рентабельности ПС, %;
Ппс = 1265990 * 24/100 = 303838 руб.
Прогнозируемая цена разработчика ПС без налогов:
Цп = Сп + Ппс, (6.17)
где Цп - прогнозируемая цена разработчика ПС, руб.;
Цп = 1265990 + 303838 = 1569828 руб.
Сумма отчислений в целевые бюджетные фонды из выручки от реализации продукции единым платежом:
, (6.18)
где Сцбф - сумма отчислений в целевые бюджетные фонды из выручки от реализации продукции единым платежом, руб.;
Нцбф - ставка отчислений в целевые бюджетные фонды из выручки от реализации продукции единым платежом, %.
Сцбф = 1569828 * 1/(100-1) = 15857 руб.
Сумма налога на добавленную стоимость:
, (6.19)
где НДС - сумма налога на добавленную стоимость, руб.;
Нндс - ставка НДС, %.
НДС = (1569828 + 15857) * 18/100 = 285423 руб.
Прогнозируемая отпускная цена:
, (6.20)
где Цо - прогнозируемая отпускная цена, руб.
Цо = 1569828 + 15857 + 285423 = 1871108 руб.
6.3 Расчет экономического эффекта от применения ПС у пользователя
Создаваемые программные средства могут предназначаться как для совершенно новых, ранее не решавшихся или решавшихся ручным способом задач, так и для традиционных задач, решаемых с помощью программных средств, которые можно совершенствовать.
В результате применения нового ПС пользователь может понести значительные капитальные затраты на приобретение и освоение ПС, доукомплектования ЭВМ новыми техническими средствами и пополнение оборотных средств. Однако, если приобретенное ПС будет в достаточной степени эффективнее базового, то дополнительные капитальные затраты быстро окупятся. Эффект может быть достигнут за счет сокращения объема ПС (уменьшения количества машинных команд, количества строк и т.д.), снижение трудоемкости подготовки данных, обработки информации, анализа результатов, уменьшения расходов машинного времени и материалов.
Для определения экономического эффекта от использования нового ПС у потребителя необходимо сравнить расходы по всем основным статьям затрат на эксплуатацию нового ПС (расходы на заработную плату с начислениями, материалы, машинное время) с расходами по соответствующим статьям базового варианта. При этом за базовый вариант следует принимать аналогичное программное средство, используемое в действующей автоматизированной системе. При сравнении базового и нового вариантов ПС в качестве экономического эффекта будет выступать общая экономия всех видов ресурсов относительно базового варианта. При этом создание нового ПС окажется экономически целесообразным лишь в том случае, если все капитальные затраты окупятся за счет получаемой экономии в ближайшие 1-2 года.
6.3.1 Исходные данные
Таблица 6.3 - Исходные данные для сравнения вариантов
Наименование показателей
|
Обозначения
|
Единицы измерения
|
Значение показателя
|
Наименование источника информации
|
|
|
|
|
в базовом варианте
|
в новом варианте
|
|
|
Средняя трудоемкость работ в расчете на 100 строк кода
|
Тс1
Тс2
|
человеко-дней с на 100 строк кода
|
0,96
|
0,92
|
По данным пользователя
|
|
Средний расход машинного времени в расчете на 100 строк кода
|
Нмв1
Нмв2
|
машино-час на 100 строк кода
|
7,7
|
7,2
|
По данным пользователя
|
|
Средний расход материалов в расчете на
100 строк кода
|
См1
См2
|
руб. на 100 строк кода
|
341
|
266
|
По данным пользователя
|
|
|
Объем работ в зависимости от функциональной группы и назначения ПС определяется по формуле:
А = Vо' • Кпс , (6.21)
где Vо' - скорректированный объем ПС, условных машино-команд;
Кпс - коэффициент применения ПС, ед.
Таким образом, A = 3633 * 0,7 = 2543 условных машинных команд
6.3.2 Расчет капитальных затрат заказчика ПС
Общие капитальные вложения заказчика (потребителя), связанные с приобретением, внедрением и использованием ПС, рассчитываются по формуле:
Ко = Кпр + Кос + Коб, (6.22)
где Кпр - затраты пользователя на приобретение ПС по отпускной цене разработчика с учетом стоимости услуг по эксплуатации и сопровождению, руб.;
Кос - затраты пользователя на освоение ПС, руб.;
Коб - затраты на пополнение оборотных средств в связи с использованием нового ПС, руб.
Затраты на освоение ПС и на пополнение оборотных средств рекомендуется рассчитывать по формулам:
Кос = Кпр • Нос , (6.23)
Коб = Кпр • Ноб , (6.24)
Кпр = Цо = 1871108
Кос = 1871108 * 0,01 = 18711 руб.
Коб = 1871108 * 0,01 = 18711 руб.
Ко = 1871108 + 18711 + 18711 = 1908530 руб.
6.3.3 Расчет экономии основных видов ресурсов в связи с использованием нового ПС
Экономия затрат на заработную плату при использовании нового ПС в расчете на объем выполненных работ:
Эоз = Эоз' • А, (6.25)
где Эоз - экономия затрат на заработную плату при решении задач с использованием нового ПС, руб.;
Эоз' - экономия затрат на заработную плату при решении задач с использованием нового ПС в расчете на 100 КБ, руб.;
А - объем выполненных работ с использованием нового ПС, 100 КБ.
Экономия затрат на заработную плату в расчете на 100 КБ:
, (6.26)
где Сзм - среднемесячная заработная плата одного программиста, руб.;
Тс1, Тс2 - трудоемкость работ в расчете на 100 строк кода при базовом и новом варианте соответственно, человеко-часов;
Тч - количество часов работы в день, ч;
ФРВ - фонд рабочего времени за месяц, ч.
Тс2 = 0,3*112*100/3633 = 0,92 человеко-дней
Эоз' = 218680 * 0,04 / 169,3 = 52 руб.
Эоз = 52 * 2543 = 131389 руб.
При определении трудоемкости, связанной с использованием программы рекомендуется ориентироваться на показатель равный 30-50% от трудоемкости разработки в часах.
Экономия начислений на заработную плату при использовании нового ПС в расчете на объем выполненных работ:
Энач = Эоз • Кнач , (6.27)
где Энач - экономия начислений на заработную плату при решении задач с использованием нового ПС, руб.;
Кнач - коэффициент начислений на заработную плату, ед.
, (6.28)
Кнач = (34 + 1)/100 = 0,35 ед.
Энач = 131389 * 0,35 = 45986 руб.
Экономия затрат на оплату машинного времени в расчете на выполненный объем работ в результате применения нового ПС:
, (6.29)
где Эмв - экономия затрат на оплату машинного времени при решении задач с использованием нового ПС, руб.;
- экономия затрат на оплату машинного времени при решении задач с использованием нового ПС в расчете на 100 КБ, руб.
Экономия затрат на оплату машинного времени в расчете на 100 КБ:
, (6.30)
где Нмв1, Нмв2 - средний расход машинного времени в расчете на 100 КБ при применении базового и нового варианта ПС соответственно, машино-часов.
Эмв' = 2200 * 0,5 = 1100 руб.
Эмв = 1100 * 2543 = 2797300 руб.
Экономия затрат на материалы при использовании нового ПС в расчете на объем выполненных работ:
, (6.31)
где Эм - экономия затрат на материалы при использовании нового ПС, руб.;
Эм' - экономия затрат на материалы в расчете на 100 КБ при использовании нового ПС, руб.:
, (6.32)
где См1, См2 - средний расход материалов у пользователя в расчете на 100 КБ при использовании базового и нового варианта ПС соответственно, руб.
Эм' = 341-266=75 руб.
Эм =75*2543 = 190725 руб.
Общая годовая экономия текущих затрат, связанных с использованием нового ПС:
, (6.33)
Эо = 131389 + 45986 + 2797300 + 190725 = 3165400 руб.
6.3.4 Расчёт экономического эффекта
Внедрение нового ПС позволит пользователю сэкономить на текущих затратах, т.е. практически получить на эту сумму дополнительную прибыль. Для пользователя в качестве экономического эффекта выступает лишь чистая прибыль - дополнительная прибыль, остающаяся в его распоряжении (ДПч), которая определяются по формуле:
, (6.34)
где ?Пч - прирост чистой прибыли, руб.;
Нмс - ставка местных налогов и сборов, %.
, (6.35)
где ?П - прирост прибыли, руб.;
Нп - ставка налога на прибыль, %.
= 3165400 - 3165400 * 24/100 = 2405704 руб.
= 2405704 - 2405704 * 3/100 = 2333533 руб.
В процессе использования нового ПС чистая прибыль в конечном итоге возмещает капитальные затраты. Однако, полученные при этом суммы результатов (прибыли) и затрат (капитальных вложений) по годам приводят к единому времени - расчетному году (за расчетный год принят 2008 год) путем умножения результатов и затрат за каждый год на коэффициент привидения (ALFAt), который рассчитывается по формуле:
, (6.36)
где Ен - норматив привидения разновременных затрат и результатов;
tp - расчетный год, tp = 1;
t - номер года, результаты и затраты которого приводятся к расчетному (2008-1, 2009-2, 2010-3, 2011-4).
Норматив приведения разновременных затрат и результатов (Ен) для программных средств ВТ в существующей практике принимается равным 0,12. При таком нормативе коэффициентам приведения (ALFAt) по годам будут соответствовать следующие значения:
ALPHA 1 = (1+0,15) 1-1 = 1
ALPHA 2 = (1+0,15) 1-2 = 0,870
ALPHA 3 = (1+0,15) 1-3 = 0,756
ALPHA 4 = (1+0,15) 1-4 = 0,658
Данные расчета экономического эффекта сведем в таблицу:
Таблица 6.4 - Расчет экономического эффекта от использования нового ПС
Показатели
|
Ед.
измерения
|
Методика расчета
|
2008
|
2009
|
2010
|
2011
|
|
Результаты:
|
|
|
|
|
|
|
|
Прирост прибыли за счет экономии затрат
|
руб.
|
? Пч
|
2333533
|
2333533
|
2333533
|
2333533
|
|
Сумма прибыли с учетом фактора времени
|
руб.
|
? Пч • ALFAt
|
2333533
|
2030174
|
1764151
|
1535465
|
|
Затраты:
|
|
|
|
|
|
|
|
Затраты на приобретение ПС
|
руб.
|
Кпр
|
1871108
|
-
|
-
|
-
|
|
Затраты на освоение ПС
|
руб.
|
Кос
|
18711
|
-
|
-
|
-
|
|
Затраты на доукомплектование ВТ техническими средствами
|
руб.
|
Ктс
|
-
|
-
|
-
|
-
|
|
Затраты на пополнение оборотных средств
|
руб.
|
Коб
|
18711
|
18711
|
18711
|
18711
|
|
Сумма затрат
|
руб.
|
Ко
|
1908530
|
18711
|
18711
|
18711
|
|
Сумма затрат с учетом фактора времени
|
руб.
|
Ко • ALFAt
|
1908530
|
16279
|
14146
|
12312
|
|
Экономический эффект
|
руб.
|
? Пч • ALFAt -Ко • ALFAt
|
425003
|
2013895
|
1750005
|
1523153
|
|
Экономический эффект с нарастающим итогом
|
руб.
|
|
425003
|
2438898
|
4188903
|
5712056
|
|
Коэффициент приведения
|
ед.
|
ALFAt
|
1
|
0,870
|
0,756
|
0,658
|
|
|
6.4 Результаты оценки экономической целесообразности
В данном разделе была рассчитана отпускная цена программного средства, которая составила 1871108 руб. Затраты потребителя, связанные с приобретением, освоением программного средства, а также пополнением оборотных средств - 1951267 руб. Прирост прибыли за счёт экономии начислений на заработную плату, оплаты машинного времени и материалов в каждый из расчётных лет составил соответственно 2333533 руб., 2030174 руб., 1764151 руб. и 1535465 руб. Затраты потребителя окупились уже в первый год, при этом получился положительный экономический эффект в размере 425003 руб. Экономический эффект за 4 года использования ПС составит 5712056 руб. Всё это даёт возможность говорить о том, что создание и внедрение ПС целесообразно.
Заключение
В представленном дипломном проекте разработан графический редактор эффектов частиц “Easy Particles”.
При разработке были использованы самые современные подходы к проектированию программного обеспечения. Программное обеспечение разработано с учетом простоты будущей модификации.
Программа имеет удобный пользовательский интерфейс, отвечающий современным требованиям. Она может использоваться на различных компьютерах с различной конфигурацией и не требует много ресурсов. Пользовательский интерфейс программы рассчитан на минимальные навыки работы с компьютером.
В ходе выполнения поставленной задачи реализованы все основные функции программного средства. Все предъявляемые к программе требования были выполнены. Отладка и тестирование программы проведены успешно.
Проведено технико-экономическое обоснование внедрения спроектированной системы. Полученный экономический эффект позволяет окупить затраты пользователя на закупку, установку ПС, обучение сотрудников его использованию и остальные. Следовательно, разработка является экономически целесообразной.
Цель, поставленная перед автором работы, была выполнена в полной мере. Проект выполнен в соответствие с ГОСТами и требованиями, предъявляемыми к технической документации.
Как уже было сказано, разработанная версия приложения является первой реализацией, наиболее общей, позволяющей использовать лишь самые основные величины и оперировать сильно ограниченным множеством настроек и характеристик.
Планируемое будущее расширение должно коснуться, в первую очередь, пользовательского интерфейса, а также задаваемых параметров частиц и эмиттеров. В целях большего удобства использования редактора, в него планируется внести изменения, связанные со способами задания скорости частиц и гравитации, действующей на них. Возможно, будет введены параметры дисперсии гравитации, или иные параметры, задающие изменение значений гравитации. Сами значения скорости и гравитации планируется вводить посредством векторов.
Необходимо изменить способы задания изменения цвета частиц (через визуальный цветовой элемент управления), ввести возможность использования дополнительных ключей цвета, с учётом длительности перехода частицы от одного цвета к другому.
Аналогичные параметры-ключи (и визуальные элементы управления, соответствующие им) будут введены для размеров частиц.
Для размеров, цвета, задержки генерации частиц планируется ввести параметры дисперсии.
Некоторые изменения претерпит и оконная система приложения. В ней будут преобладать перетаскиваемые присоединяемые панели. Станет возможным изменение размеров окна вывода, а также использование полноэкранного режима при просмотре эффектов.
Среди прочих возможных изменений можно отметить запуск в окне просмотра и встраивание эффектов частиц в файлы видео, а также расширенные программные интерфейсы для разработчиков компьютерных игр и иных графических приложений.
Перечисленные изменения должны повысить интерес к программному средству и его полезность для разных групп пользователей.
Список использованных источников
1) Бьёрн Страуструп Дизайн и эволюция языка C++ - М.: ДМК пресс, 2006. - 448с.
2) Ефремова О.С. Требования охраны труда при работе на персональных электронно-вычислительных машинах (ПК) - М.: Альфа-пресс, 2005. - 150с.
4) Санитарные нормы для образовательных учреждений . - 5-е изд., доп. - М.: Образование в документах, 2002. - 200с.
5) Замбржицкий О.Н. Гигиеническая оценка естественного и искусственного освещения помещений. - Мн.: БГМУ, 2005. - 18 с.
6) СанПиН N 9-131 РБ 2000 Гигиенические требования к видеодисплейным терминалам (ВДТ), электронно-вычислительным машинам (ЭВМ) и организации работы
7) Косилина Н.И., Колтановского А.П. Производственная гимнастика для работников умственного труда - М.: Физкультура и спорт, 1983.
8) Кляуззе В.П. Безопасность & компьютер. - Мн.: В.П.Кляуззе, 2001. - 155с.
Приложение А
(обязательное)
Текст программного модуля обработки частиц
//ParticleSystemChain.cpp (очередь эмиттеров)
#include "ParticleSystemChain.h"
#include "PSOutputFrame.h"//just for using canvas to get current reflecting mode ang zoom
#define BLEND_SRC "blend_src"
#define BLEND_DST "blend_dst"
#define ITEM_SELECTED "item_selected"
#define PSBOUND_SELECTED_COLOR wxColour(200, 200, 200, 255)
#define PSBOUNS_CHOOSED_COLOR wxColour(70, 70, 70, 255)
#define PSBOUND_COLOR wxColour(50, 50, 50, 255)
#define MIN_RUN_PSCHAIN_ITEM_DIMENSION 20
ParticleSystemChain *ParticleSystemChain::singletonChain = NULL;
ParticleSystemChain* ParticleSystemChain::Master()
{
if(!singletonChain)
singletonChain = new ParticleSystemChain();
return singletonChain;
}
void ParticleSystemChain::CleanSingleton()
{
if(singletonChain)
{
delete singletonChain;
singletonChain = NULL;
}
}
int ParticleSystemChain::AddSystem()
{
ParticleSystem* ps = new ParticleSystem();
all_ps.push_back(ps);
if(workMode != ParticleSystemChainWorkMode_STATIC)
ps->start();
int new_ps_layer = (int)all_ps.size() - 1;
if(selectedSystemLayer < 0)
selectedSystemLayer = new_ps_layer;
return new_ps_layer;
}
bool ParticleSystemChain::RemoveSystemAtLayer(int layer)
delete all_ps.at(layer);
void ParticleSystemChain::RemoveAll()
{
vector<ParticleSystem*>::iterator iter = all_ps.begin();
while(iter != all_ps.end())
{
delete((ParticleSystem*)*iter);
++iter;
}
all_ps.clear();
selectedSystemLayer = choosedSystemLayer = -1;
}
void ParticleSystemChain::MoveSystem(int from, int to)
void ParticleSystemChain::CopySystemsData(int layer_from, int layer_to)
int numof_systems = (int)all_ps.size();
bool ParticleSystemChain::Save(TiXmlElement* root) const
{
TiXmlElement tmp("BLENDING");
TiXmlElement *caption = (TiXmlElement*)root->InsertEndChild(tmp);
if(!caption)
return false;
caption->SetAttribute(BLEND_SRC, blendModeSrc);
caption->SetAttribute(BLEND_DST, blendModeDst);
return saveSystems(root);
}
bool ParticleSystemChain::Load(TiXmlElement *root)
{
TiXmlElement *blending_attrs_ptr = (TiXmlElement*)root->FirstChild("BLENDING");
if(!blending_attrs_ptr)//old version file (1.0), just set defaults
{
blendModeSrc = GL_ONE;
blendModeDst = GL_ONE_MINUS_SRC_ALPHA;
}
else
{
blending_attrs_ptr->Attribute(BLEND_SRC, &blendModeSrc);
blending_attrs_ptr->Attribute(BLEND_DST, &blendModeDst);
}
return loadSystems(root);
}
ParticleSystemOutputCoordCharacter ParticleSystemChain::AnalyseOutputCoords(MYPoint2D point) const
{
ParticleSystemOutputCoordCharacter res;
res.psLayer = -1;
res.isLeft = res.isRight = res.isTop = res.isBottom = false;
//first find selecting system layer
vector<ParticleSystem*>::const_iterator iter = all_ps.end();
vector<ParticleSystem*>::const_iterator begin_iter = all_ps.begin();
size_t i = all_ps.size();
wxRect system_rect, tmp_rect;
bool chain_is_run = (workMode != ParticleSystemChainWorkMode_STATIC);
while(iter != begin_iter)
{
--iter, --i;
wxRect tmp_rect;
MYPoint2D appear_box_position = MYPoint2DMake((*iter)->getX(), (*iter)->getY());
MYSize2D appear_box_size = (*iter)->getAppearBoxSize();
if(chain_is_run)
{
tmp_rect = wxRect(appear_box_position.x, appear_box_position.y, appear_box_size.width, appear_box_size.height);
if(tmp_rect.GetWidth() < MIN_RUN_PSCHAIN_ITEM_DIMENSION)
{
int diff = MIN_RUN_PSCHAIN_ITEM_DIMENSION - tmp_rect.GetWidth();
tmp_rect.SetX(tmp_rect.GetX() - diff / 2);
tmp_rect.SetWidth(MIN_RUN_PSCHAIN_ITEM_DIMENSION);
}
if(tmp_rect.GetHeight() < MIN_RUN_PSCHAIN_ITEM_DIMENSION)
{
int diff = MIN_RUN_PSCHAIN_ITEM_DIMENSION - tmp_rect.GetHeight();
tmp_rect.SetY(tmp_rect.GetY() - diff / 2);
tmp_rect.SetHeight(MIN_RUN_PSCHAIN_ITEM_DIMENSION);
}
}
else
tmp_rect = wxRect(appear_box_position.x - BOUND_DIMENSION, appear_box_position.y - BOUND_DIMENSION,
appear_box_size.width + BOUND_DIMENSION * 2, appear_box_size.height + BOUND_DIMENSION * 2);
if(point.x >= tmp_rect.x && point.x < (tmp_rect.x + tmp_rect.width) &&
point.y >= tmp_rect.y && point.y < (tmp_rect.y + tmp_rect.height) )
{
res.psLayer = (int)i;
system_rect = tmp_rect;
break;
}
}
if( res.psLayer == -1/*no selected ps*/ || chain_is_run )
return res;
//selecting system has been finded, and <!chainIsRun> - maybe we touched on some ps's bottom(-s)
if( (point.x >= system_rect.x) && (point.x < system_rect.x + BOUND_DIMENSION) )
res.isLeft = true;
if( (point.x < system_rect.x + system_rect.width) && (point.x >= system_rect.x + system_rect.width - BOUND_DIMENSION) )
res.isRight = true;
if( (point.y >= system_rect.y) && (point.y < system_rect.y + BOUND_DIMENSION) )
res.isTop = true;
if( (point.y < system_rect.y + system_rect.height) && (point.y >= system_rect.y + system_rect.height - BOUND_DIMENSION) )
res.isBottom = true;
return res;
}
void ParticleSystemChain::ChooseSystemAtLayer(int layer)
if( (layer < 0)
int ParticleSystemChain::GetChoosedSystemLayer() const
{
return choosedSystemLayer;
}
void ParticleSystemChain::SelectSystemAtLayer(int layer)
int ParticleSystemChain::GetSelectedSystemLayer() const
{
return selectedSystemLayer;
}
ParticleSystemChainWorkMode ParticleSystemChain::GetWorkMode() const
Страницы: 1, 2, 3, 4
|