Pencil2D  ff90c0872e88be3bf81c548cd60f01983012ec49
Pencil2D is an animation software for both bitmap and vector graphics. It is free, multi-platform, and open source.
 All Classes Functions
bezierarea.cpp
1 /*
2 
3 Pencil - Traditional Animation Software
4 Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5 Copyright (C) 2012-2017 Matthew Chiawen Chang
6 
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; version 2 of the License.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15 
16 */
17 
18 
19 #include "bezierarea.h"
20 
21 #include "pencilerror.h"
22 
23 BezierArea::BezierArea()
24 {
25 }
26 
27 BezierArea::BezierArea(QList<VertexRef> vertexList, int colour)
28 {
29  mVertex = vertexList;
30  mColourNumber = colour;
31  mSelected = false;
32 }
33 
34 VertexRef BezierArea::getVertexRef(int i)
35 {
36  while (i >= mVertex.size() )
37  {
38  i = i - mVertex.size();
39  }
40  while (i < 0 )
41  {
42  i = i + mVertex.size();
43  }
44  return mVertex[i];
45 }
46 
47 void BezierArea::setSelected(bool YesOrNo)
48 {
49  mSelected = YesOrNo;
50 }
51 
52 Status BezierArea::createDomElement( QXmlStreamWriter& xmlStream )
53 {
54  xmlStream.writeStartElement( "area" );
55  xmlStream.writeAttribute( "colourNumber", QString::number( mColourNumber ) );
56 
57  int errorLocation = -1;
58  for ( int i = 0; i < mVertex.size(); i++ )
59  {
60  xmlStream.writeEmptyElement( "vertex" );
61  xmlStream.writeAttribute( "curve", QString::number( mVertex.at( i ).curveNumber ) );
62  xmlStream.writeAttribute( "vertex", QString::number( mVertex.at( i ).vertexNumber ) );
63 
64  if ( errorLocation < 0 && xmlStream.hasError() )
65  {
66  errorLocation = i;
67  }
68  }
69 
70  xmlStream.writeEndElement(); // Close area element
71 
72  if ( xmlStream.hasError() && errorLocation >= 0 )
73  {
74  QStringList debugInfo = QStringList() << "BezierArea::createDomElement"
75  << QString( "colourNumber = %1" ).arg( mColourNumber )
76  << QString( "- mVertex[%1] has failed to write" ).arg( errorLocation )
77  << QString( "&nbsp;&nbsp;curve = %1" ).arg( mVertex.at( errorLocation ).curveNumber )
78  << QString( "&nbsp;&nbsp;vertex = %1 " ).arg( mVertex.at( errorLocation ).vertexNumber );
79 
80  return Status( Status::FAIL, debugInfo );
81  }
82 
83  return Status::OK;
84 }
85 
86 void BezierArea::loadDomElement(QDomElement element)
87 {
88  mColourNumber = element.attribute("colourNumber").toInt();
89 
90  QDomNode vertexTag = element.firstChild();
91  while (!vertexTag.isNull())
92  {
93  QDomElement vertexElement = vertexTag.toElement();
94  if (!vertexElement.isNull())
95  {
96  if (vertexElement.tagName() == "vertex")
97  {
98  mVertex.append( VertexRef(vertexElement.attribute("curve").toInt() , vertexElement.attribute("vertex").toInt() ) );
99  }
100  }
101  vertexTag = vertexTag.nextSibling();
102  }
103 }