17 #include "layervector.h"
18 #include "vectorimage.h"
23 mName = QString(tr(
"Vector Layer"));
26 LayerVector::~LayerVector()
63 bool LayerVector::usesColour(
int colorIndex)
65 bool bUseColor =
false;
66 foreachKeyFrame( [&] (
KeyFrame* pKeyFrame )
68 auto pVecImage =
static_cast< VectorImage*
>( pKeyFrame );
70 bUseColor = bUseColor || pVecImage->usesColour( colorIndex );
76 void LayerVector::removeColour(
int colorIndex )
78 foreachKeyFrame( [=](
KeyFrame* pKeyFrame )
80 auto pVecImage =
static_cast< VectorImage*
>( pKeyFrame );
81 pVecImage->removeColour( colorIndex );
85 void LayerVector::loadImageAtFrame(QString path,
int frameNumber)
87 if ( keyExists( frameNumber ) )
89 removeKeyFrame( frameNumber );
92 vecImg->setPos( frameNumber );
93 vecImg->setObject(
object() );
95 addKeyFrame( frameNumber, vecImg );
98 Status LayerVector::saveKeyFrame(
KeyFrame* pKeyFrame, QString path )
100 QStringList debugInfo = QStringList() <<
"LayerVector::saveKeyFrame" << QString(
"pKeyFrame.pos() = %1" ).arg( pKeyFrame->pos() ) << QString(
"path = " ).append( path );
103 QString theFileName = fileName( pKeyFrame->pos() );
104 QString strFilePath = QDir( path ).filePath( theFileName );
105 debugInfo << QString(
"strFilePath = " ).append( strFilePath );
106 Status st = pVecImage->write( strFilePath,
"VEC" );
109 QStringList vecImageDetails = st.detailsList();
110 for ( QString detail : vecImageDetails )
112 detail.prepend(
" " );
114 debugInfo << QString(
"- VectorImage failed to write" ) << vecImageDetails;
115 return Status( Status::FAIL, debugInfo );
121 QString LayerVector::fileName(
int frame )
123 QString layerNumberString = QString::number(
id() );
124 QString frameNumberString = QString::number(frame);
125 while ( layerNumberString.length() < 3) layerNumberString.prepend(
"0");
126 while ( frameNumberString.length() < 3) frameNumberString.prepend(
"0");
127 return layerNumberString+
"."+frameNumberString+
".vec";
130 QDomElement LayerVector::createDomElement(QDomDocument& doc)
132 QDomElement layerTag = doc.createElement(
"layer");
134 layerTag.setAttribute(
"id",
id() );
135 layerTag.setAttribute(
"name", mName );
136 layerTag.setAttribute(
"visibility", mVisible );
137 layerTag.setAttribute(
"type", type() );
139 foreachKeyFrame( [&] (
KeyFrame* pKeyFrame )
142 QDomElement imageTag = doc.createElement(
"image" );
143 imageTag.setAttribute(
"frame", pKeyFrame->pos() );
144 imageTag.setAttribute(
"src", fileName( pKeyFrame->pos() ) );
145 layerTag.appendChild( imageTag );
151 void LayerVector::loadDomElement(QDomElement element, QString dataDirPath)
153 if ( !element.attribute(
"id" ).isNull() )
155 int id = element.attribute(
"id" ).toInt();
158 mName = element.attribute(
"name");
159 mVisible = (element.attribute(
"visibility") ==
"1");
161 QDomNode imageTag = element.firstChild();
162 while (!imageTag.isNull())
164 QDomElement imageElement = imageTag.toElement();
165 if (!imageElement.isNull())
167 if (imageElement.tagName() ==
"image")
169 if (!imageElement.attribute(
"src").isNull())
171 QString path = dataDirPath +
"/" + imageElement.attribute(
"src");
173 if (!fi.exists()) path = imageElement.attribute(
"src");
174 int position = imageElement.attribute(
"frame").toInt();
175 loadImageAtFrame( path, position );
179 int frame = imageElement.attribute(
"frame").toInt();
180 addNewEmptyKeyAt( frame );
181 getVectorImageAtFrame( frame )->loadDomElement(imageElement);
185 imageTag = imageTag.nextSibling();
189 VectorImage* LayerVector::getVectorImageAtFrame(
int frameNumber )
191 return static_cast< VectorImage*
>( getKeyFrameAt( frameNumber ) );
194 VectorImage* LayerVector::getLastVectorImageAtFrame(
int frameNumber,
int increment )
196 return static_cast< VectorImage*
>( getLastKeyFrameAtPosition( frameNumber + increment ) );