File indexing completed on 2024-06-16 04:17:26
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef __KIS_PAINTOP_PLUGIN_UTILS_H 0008 #define __KIS_PAINTOP_PLUGIN_UTILS_H 0009 0010 #include "kis_paint_information.h" 0011 #include "kis_paintop_utils.h" 0012 #include "kis_paintop_settings.h" 0013 #include "KisAirbrushOptionData.h" 0014 #include "KisStandardOptions.h" 0015 #include "KisAirbrushOptionData.h" 0016 #include "KisSpacingOption.h" 0017 0018 namespace KisPaintOpPluginUtils { 0019 0020 /** 0021 * Similar to KisPaintOpUtils::effectiveSpacing, but some of the required parameters are obtained 0022 * from the provided configuration options. This function assumes a common configuration where 0023 * spacing and airbrush settings are configured through a KisSpacingOption and 0024 * KisAirbrushOptionData. This type of configuration is used by several different paintops. 0025 * @param dabWidth - The dab width. 0026 * @param dabHeight - The dab height. 0027 * @param isotropicSpacing - If @c true the spacing should be isotropic. 0028 * @param rotation - The rotation angle in radians. 0029 * @param axesFlipped - If @c true the axes should be flipped. 0030 * @param spacingVal - The spacing value. 0031 * @param autoSpacingActive - If @c true the autospacing will be activated. 0032 * @param autoSpacingCoeff - The autospacing coefficient. 0033 * @param lodScale - The level of details scale. 0034 * @param airbrushOption - The airbrushing option. Can be null for paintops that don't support 0035 * airbrushing. 0036 * @param spacingOption - The pressure-curve spacing option. Can be null for paintops that don't 0037 * support pressure-based spacing. 0038 * @param pi - The paint information. 0039 * @see KisPaintInformation 0040 */ 0041 KisSpacingInformation effectiveSpacing(qreal dabWidth, 0042 qreal dabHeight, 0043 bool isotropicSpacing, 0044 qreal rotation, 0045 bool axesFlipped, 0046 qreal spacingVal, 0047 bool autoSpacingActive, 0048 qreal autoSpacingCoeff, 0049 qreal lodScale, 0050 const KisAirbrushOptionData *airbrushOption, 0051 const KisSpacingOption *spacingOption, 0052 const KisPaintInformation &pi) 0053 { 0054 // Extract required parameters. 0055 bool distanceSpacingEnabled = true; 0056 if (airbrushOption && airbrushOption->isChecked) { 0057 distanceSpacingEnabled = !airbrushOption->ignoreSpacing; 0058 } 0059 qreal extraScale = 1.0; 0060 if (spacingOption && spacingOption->isChecked()) { 0061 extraScale = spacingOption->apply(pi); 0062 } 0063 0064 return KisPaintOpUtils::effectiveSpacing(dabWidth, dabHeight, extraScale, 0065 distanceSpacingEnabled, isotropicSpacing, rotation, 0066 axesFlipped, spacingVal, autoSpacingActive, 0067 autoSpacingCoeff, lodScale); 0068 } 0069 0070 /** 0071 * Similar to KisPaintOpUtils::effectiveTiming, but some of the required parameters are obtained 0072 * from the provided configuration options. This function assumes a common configuration where 0073 * airbrush settings are configured through a KisAirbrushOptionData and KisRateOption. This type 0074 * of configuration is used by several different paintops. 0075 * @param airbrushOption - The airbrushing option. Can be null for paintops that don't support 0076 * airbrushing. 0077 * @param rateOption - The pressure-curve airbrush rate option. Can be null for paintops that don't 0078 * support a pressure-based airbrush rate. 0079 * @param pi - The paint information. 0080 * @see KisPaintInformation 0081 */ 0082 KisTimingInformation effectiveTiming(const KisAirbrushOptionData *airbrushOption, 0083 const KisRateOption *rateOption, 0084 const KisPaintInformation &pi) 0085 { 0086 // Extract required parameters. 0087 bool timingEnabled = false; 0088 qreal timingInterval = LONG_TIME; 0089 if (airbrushOption) { 0090 timingEnabled = airbrushOption->isChecked; 0091 timingInterval = 1000.0 / airbrushOption->airbrushRate; 0092 } 0093 qreal rateExtraScale = 1.0; 0094 if (rateOption && rateOption->isChecked()) { 0095 rateExtraScale = rateOption->apply(pi); 0096 } 0097 0098 return KisPaintOpUtils::effectiveTiming(timingEnabled, timingInterval, rateExtraScale); 0099 } 0100 0101 } 0102 0103 #endif /* __KIS_PAINTOP_PLUGIN_UTILS_H */