src/editmodes/curvemode.cpp

changeset 1063
1f15c52c11f6
parent 1062
4119185b56ca
child 1065
c8ecddbd99e9
equal deleted inserted replaced
1062:4119185b56ca 1063:1f15c52c11f6
23 CurveMode::CurveMode (GLRenderer* renderer) : 23 CurveMode::CurveMode (GLRenderer* renderer) :
24 Super (renderer) {} 24 Super (renderer) {}
25 25
26 void CurveMode::render (QPainter& painter) const 26 void CurveMode::render (QPainter& painter) const
27 { 27 {
28 if (m_drawedVerts.size() >= 1) 28 if (length(m_drawedVerts) >= 1)
29 { 29 {
30 Vertex curve[4]; 30 Vertex curve[4];
31 QPoint curve2d[4]; 31 QPoint curve2d[4];
32 32
33 for (int i = 0; i < qMin (length(curve), m_drawedVerts.size()); ++i) 33 for (int i = 0; i < qMin (length(curve), length(m_drawedVerts)); ++i)
34 curve[i] = m_drawedVerts[i]; 34 curve[i] = m_drawedVerts[i];
35 35
36 // Factor the cursor into the preview 36 // Factor the cursor into the preview
37 if (m_drawedVerts.size() < 4) 37 if (length(m_drawedVerts) < 4)
38 curve[m_drawedVerts.size()] = getCursorVertex(); 38 curve[length(m_drawedVerts)] = getCursorVertex();
39 39
40 // Default the control points to the first vertex position 40 // Default the control points to the first vertex position
41 if (m_drawedVerts.size() < 2) 41 if (length(m_drawedVerts) < 2)
42 curve[2] = curve[0]; 42 curve[2] = curve[0];
43 43
44 if (m_drawedVerts.size() < 3) 44 if (length(m_drawedVerts) < 3)
45 curve[3] = curve[2]; 45 curve[3] = curve[2];
46 46
47 for (int i = 0; i < length(curve); ++i) 47 for (int i = 0; i < length(curve); ++i)
48 curve2d[i] = renderer()->convert3dTo2d (curve[i]); 48 curve2d[i] = renderer()->convert3dTo2d (curve[i]);
49 49
50 painter.setPen (QColor (0, 112, 112)); 50 painter.setPen (QColor (0, 112, 112));
51 if (m_drawedVerts.size() >= 2) 51 if (length(m_drawedVerts) >= 2)
52 painter.drawLine (curve2d[0], curve2d[2]); 52 painter.drawLine (curve2d[0], curve2d[2]);
53 53
54 if (m_drawedVerts.size() >= 3) 54 if (length(m_drawedVerts) >= 3)
55 painter.drawLine (curve2d[1], curve2d[3]); 55 painter.drawLine (curve2d[1], curve2d[3]);
56 56
57 for (int i = 0; i < qMin (length(curve), m_drawedVerts.size() + 1); ++i) 57 for (int i = 0; i < qMin (length(curve), length(m_drawedVerts) + 1); ++i)
58 { 58 {
59 if (i < 2) 59 if (i < 2)
60 renderer()->drawPoint (painter, curve2d[i]); 60 renderer()->drawPoint (painter, curve2d[i]);
61 else 61 else
62 // Give control points a different color 62 // Give control points a different color
82 return EditModeType::Curve; 82 return EditModeType::Curve;
83 } 83 }
84 84
85 void CurveMode::endDraw() 85 void CurveMode::endDraw()
86 { 86 {
87 if (m_drawedVerts.size() == 4) 87 if (length(m_drawedVerts) == 4)
88 { 88 {
89 LDObjectList objs; 89 LDObjectList objs;
90 objs << LDSpawn<LDBezierCurve> (m_drawedVerts[0], m_drawedVerts[1], m_drawedVerts[2], m_drawedVerts[3]); 90 objs << LDSpawn<LDBezierCurve> (m_drawedVerts[0], m_drawedVerts[1], m_drawedVerts[2], m_drawedVerts[3]);
91 finishDraw (objs); 91 finishDraw (objs);
92 } 92 }

mercurial