Krita Source Code Documentation
Loading...
Searching...
No Matches
KisHeightMapImport Class Reference

#include <kis_heightmap_import.h>

+ Inheritance diagram for KisHeightMapImport:

Public Member Functions

KisImportExportErrorCode convert (KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration=0) override
 
 KisHeightMapImport (QObject *parent, const QVariantList &)
 
 ~KisHeightMapImport () override
 
- Public Member Functions inherited from KisImportExportFilter
virtual KisConfigWidgetcreateConfigurationWidget (QWidget *parent, const QByteArray &from="", const QByteArray &to="") const
 createConfigurationWidget creates a widget that can be used to define the settings for a given import/export filter
 
virtual KisPropertiesConfigurationSP defaultConfiguration (const QByteArray &from="", const QByteArray &to="") const
 defaultConfiguration defines the default settings for the given import export filter
 
virtual QMap< QString, KisExportCheckBase * > exportChecks ()
 generate and return the list of capabilities of this export filter. The list
 
virtual bool exportSupportsGuides () const
 exportSupportsGuides Because guides are in the document and not the image, checking for guides cannot be made an exportCheck.
 
KisPropertiesConfigurationSP lastSavedConfiguration (const QByteArray &from="", const QByteArray &to="") const
 lastSavedConfiguration return the last saved configuration for this filter
 
 Private ()
 
void setBatchMode (bool batchmode)
 
void setFilename (const QString &filename)
 
void setImportUserFeedBackInterface (KisImportUserFeedbackInterface *interface)
 
void setMimeType (const QString &mime)
 
void setRealFilename (const QString &filename)
 
void setUpdater (QPointer< KoUpdater > updater)
 
virtual bool supportsIO () const
 Override and return false for the filters that use a library that cannot handle file handles, only file names.
 
QPointer< KoUpdaterupdater ()
 
virtual QString verify (const QString &fileName) const
 Verify whether the given file is correct and readable.
 
 ~KisImportExportFilter () override
 
 ~Private ()
 

Additional Inherited Members

- Public Attributes inherited from KisImportExportFilter
bool batchmode
 
QMap< QString, KisExportCheckBase * > capabilities
 
QString filename
 
KisImportUserFeedbackInterfaceimportUserFeedBackInterface {nullptr}
 
QByteArray mime
 
QString realFilename
 
QPointer< KoUpdaterupdater
 
- Static Public Attributes inherited from KisImportExportFilter
static const QString CICPPrimariesTag = "CICPCompatiblePrimaries"
 
static const QString CICPTransferCharacteristicsTag = "CICPCompatibleTransferFunction"
 
static const QString ColorDepthIDTag = "ColorDepthID"
 
static const QString ColorModelIDTag = "ColorModelID"
 
static const QString HDRTag = "HDRSupported"
 
static const QString ImageContainsTransparencyTag = "ImageContainsTransparency"
 
static const QString sRGBTag = "sRGB"
 
- Protected Member Functions inherited from KisImportExportFilter
void addCapability (KisExportCheckBase *capability)
 
void addSupportedColorModels (QList< QPair< KoID, KoID > > supportedColorModels, const QString &name, KisExportCheckBase::Level level=KisExportCheckBase::PARTIALLY)
 
bool batchMode () const
 
QString filename () const
 
KisImportUserFeedbackInterfaceimportUserFeedBackInterface () const
 
virtual void initializeCapabilities ()
 
 KisImportExportFilter (QObject *parent=0)
 
QByteArray mimeType () const
 
QString realFilename () const
 
void setProgress (int value)
 
QString verifyZiPBasedFiles (const QString &fileName, const QStringList &filesToCheck) const
 

Detailed Description

Definition at line 15 of file kis_heightmap_import.h.

Constructor & Destructor Documentation

◆ KisHeightMapImport()

KisHeightMapImport::KisHeightMapImport ( QObject * parent,
const QVariantList &  )

Definition at line 57 of file kis_heightmap_import.cpp.

57 : KisImportExportFilter(parent)
58{
59}
KisImportExportFilter(QObject *parent=0)

◆ ~KisHeightMapImport()

KisHeightMapImport::~KisHeightMapImport ( )
override

Definition at line 61 of file kis_heightmap_import.cpp.

62{
63}

Member Function Documentation

◆ convert()

KisImportExportErrorCode KisHeightMapImport::convert ( KisDocument * document,
QIODevice * io,
KisPropertiesConfigurationSP configuration = 0 )
overridevirtual

The filter chain calls this method to perform the actual conversion. The passed mimetypes should be a pair of those you specified in your .desktop file. You have to implement this method to make the filter work.

Returns
The error status, see the #ConversionStatus enum. KisImportExportFilter::OK means that everything is alright.

Implements KisImportExportFilter.

Definition at line 65 of file kis_heightmap_import.cpp.

66{
67 Q_UNUSED(configuration);
69 if (depthId.id().isNull()) {
70 document->setErrorMessage(i18n("Unknown file type"));
72 }
73
74 int w = 0;
75 int h = 0;
76
77 KIS_ASSERT(io->isOpen());
78 const quint64 size = io->size();
79 if (size == 0) {
81 }
82
83 QDataStream::ByteOrder bo = QDataStream::LittleEndian;
84
85 if (!batchMode()) {
86 KisCursorOverrideHijacker cursorHijacker;
87
88 KoDialog* kdb = new KoDialog(qApp->activeWindow());
89 kdb->setWindowTitle(i18n("Heightmap Import Options"));
91
93
94 kdb->setMainWidget(wdg);
95
96 connect(wdg, SIGNAL(statusUpdated(bool)), kdb, SLOT(enableButtonOk(bool)));
97
98 KisConfig config(true);
99
100 QString filterConfig = config.importConfiguration(mimeType());
102 cfg->fromXML(filterConfig);
103
104
105 int endianness = cfg->getInt("endianness", 1);
106 if (endianness == 0) {
107 wdg->radioBig->setChecked(true);
108 }
109 else {
110 wdg->radioLittle->setChecked(true);
111 }
112
113 wdg->fileSizeLabel->setText(QString::number(size));
114
115 if(depthId == Integer8BitsColorDepthID) {
116 wdg->bppLabel->setText(QString::number(8));
117 wdg->typeLabel->setText("Integer");
118 }
119 else if(depthId == Integer16BitsColorDepthID) {
120 wdg->bppLabel->setText(QString::number(16));
121 wdg->typeLabel->setText("Integer");
122 }
123 else if(depthId == Float32BitsColorDepthID) {
124 wdg->bppLabel->setText(QString::number(32));
125 wdg->typeLabel->setText("Float");
126 }
127 else {
130 }
131
132 if (kdb->exec() == QDialog::Rejected) {
134 }
135
136 cfg->setProperty("endianness", wdg->radioBig->isChecked() ? 0 : 1);
137
138 config.setImportConfiguration(mimeType(), cfg);
139
140 w = wdg->widthInput->value();
141 h = wdg->heightInput->value();
142
143 bo = QDataStream::LittleEndian;
144 cfg->setProperty("endianness", 1);
145 if (wdg->radioBig->isChecked()) {
146 bo = QDataStream::BigEndian;
147 cfg->setProperty("endianness", 0);
148 }
150
151 } else {
152 const int pixelSize =
153 depthId == Float32BitsColorDepthID ? 4 :
154 depthId == Integer16BitsColorDepthID ? 2 : 1;
155
156 const int numPixels = size / pixelSize;
157
158 w = std::sqrt(numPixels);
159 h = numPixels / w;
160 bo = QDataStream::LittleEndian;
161 }
162
163
164 QDataStream s(io);
165 s.setByteOrder(bo);
166 // needed for 32bit float data
167 s.setFloatingPointPrecision(QDataStream::SinglePrecision);
168
169 const KoColorSpace *colorSpace = KoColorSpaceRegistry::instance()->colorSpace(GrayAColorModelID.id(), depthId.id(), "Gray-D50-elle-V2-srgbtrc.icc");
170 KisImageSP image = new KisImage(document->createUndoStore(), w, h, colorSpace, "imported heightmap");
171 KisPaintLayerSP layer = new KisPaintLayer(image, image->nextLayerName(), 255);
172
173 if (depthId == Float32BitsColorDepthID) {
174 fillData<float>(layer->paintDevice(), w, h, s);
175 }
176 else if (depthId == Integer16BitsColorDepthID) {
177 fillData<quint16>(layer->paintDevice(), w, h, s);
178 }
179 else if (depthId == Integer8BitsColorDepthID) {
180 fillData<quint8>(layer->paintDevice(), w, h, s);
181 }
182 else {
185 }
186
187 image->addNode(layer.data(), image->rootLayer().data());
188 document->setCurrentImage(image);
190}
const KoID Float32BitsColorDepthID("F32", ki18n("32-bit float/channel"))
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void setExportConfiguration(const QString &filterId, KisPropertiesConfigurationSP properties) const
The KisCursorOverrideHijacker class stores all override cursors in a stack, and resets them back afte...
KisGroupLayerSP rootLayer() const
QString nextLayerName(const QString &baseName="") const
Definition kis_image.cc:715
A dialog base class with standard buttons and predefined layouts.
Definition KoDialog.h:116
void setMainWidget(QWidget *widget)
Definition KoDialog.cpp:354
void setButtons(ButtonCodes buttonMask)
Definition KoDialog.cpp:195
@ Ok
Show Ok button. (this button accept()s the dialog; result set to QDialog::Accepted)
Definition KoDialog.h:127
@ Cancel
Show Cancel-button. (this button reject()s the dialog; result set to QDialog::Rejected)
Definition KoDialog.h:130
Definition KoID.h:30
QString id() const
Definition KoID.cpp:63
#define KIS_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:85
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
int size(const Forest< T > &forest)
Definition KisForest.h:1232
KoID mimeTypeToKoID(const class QByteArray &mimeType)
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
KisPaintDeviceSP paintDevice
const KoColorSpace * colorSpace(const QString &colorModelId, const QString &colorDepthId, const KoColorProfile *profile)
static KoColorSpaceRegistry * instance()

References KisNodeFacade::addNode(), KisImportExportFilter::batchMode(), KoDialog::Cancel, ImportExportCodes::Cancelled, KoColorSpaceRegistry::colorSpace(), connect(), KisSharedPtr< T >::data(), ImportExportCodes::FileFormatIncorrect, Float32BitsColorDepthID, GrayAColorModelID, KoID::id(), KisConfig::importConfiguration(), KoColorSpaceRegistry::instance(), Integer16BitsColorDepthID, Integer8BitsColorDepthID, ImportExportCodes::InternalError, KIS_ASSERT, KIS_ASSERT_RECOVER_RETURN_VALUE, KisImportExportFilter::mimeType(), KisHeightmapUtils::mimeTypeToKoID(), KisImage::nextLayerName(), ImportExportCodes::OK, KoDialog::Ok, KisPaintLayer::paintDevice, KisImage::rootLayer(), KoDialog::setButtons(), KisConfig::setExportConfiguration(), KisConfig::setImportConfiguration(), and KoDialog::setMainWidget().


The documentation for this class was generated from the following files: