diff options
-rw-r--r-- | examples/datavis3d/barchart/main.cpp | 16 | ||||
-rw-r--r-- | examples/datavis3d/rainfall/main.cpp | 314 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dbars.cpp | 116 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dbars.h | 7 | ||||
-rw-r--r-- | src/datavis3d/engine/q3dbars_p.h | 2 | ||||
-rw-r--r-- | src/datavis3d/engine/qdatarow.cpp | 18 | ||||
-rw-r--r-- | src/datavis3d/engine/qdatarow_p.h | 9 | ||||
-rw-r--r-- | src/datavis3d/engine/qdataset.cpp | 8 |
8 files changed, 293 insertions, 197 deletions
diff --git a/examples/datavis3d/barchart/main.cpp b/examples/datavis3d/barchart/main.cpp index 0a311892..bee02340 100644 --- a/examples/datavis3d/barchart/main.cpp +++ b/examples/datavis3d/barchart/main.cpp @@ -216,18 +216,18 @@ void ChartDataGenerator::addDataSet() QVector<QString> weeks; weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5"; - // Set up data - float hours[5][7] = {{2, 1, 3, 0.25, 1, 5, 7} - , {0.5, 1, 3, 1, 2, 2, 3} - , {1, 1, 2, 1, 4, 4, 4} - , {0, 0, 0, 0, 2, 2, 0.25} - , {3, 3, 6, 2, 2, 1, 1}}; + // Set up data Mon Tue Wed Thu Fri Sat Sun + float hours[5][7] = { {2.0, 1.0, 3.0, 0.2, 1.0, 5.0, 7.0} // week 1 + , {0.5, 1.0, 3.0, 1.0, 2.0, 2.0, 3.0} // week 2 + , {1.0, 1.0, 2.0, 1.0, 4.0, 4.0, 4.0} // week 3 + , {0.0, 0.0, 0.0, 0.0, 2.0, 2.0, 0.3} // week 4 + , {3.0, 3.0, 6.0, 2.0, 2.0, 1.0, 1.0}}; // week 5 // Create data set QDataSet *dataSet = new QDataSet(); // Add labels - dataSet->setLabels("Day of week", "Week of year", "Hours doing something", weeks, days); + dataSet->setLabels("Week of year", "Day of week", "Hours playing banjo", weeks, days); // Create data rows QDataRow *dataRow; @@ -236,7 +236,7 @@ void ChartDataGenerator::addDataSet() // Create data items for (int day = 0; day < days.size(); day++) { // Add data to rows - dataRow->addItem(new QDataItem(hours[week][day], "h, " + days.at(day))); + dataRow->addItem(new QDataItem(hours[week][day], "h"));//, " + days.at(day))); } // Add row to set dataSet->addRow(dataRow); diff --git a/examples/datavis3d/rainfall/main.cpp b/examples/datavis3d/rainfall/main.cpp index 55f7155d..75ac3069 100644 --- a/examples/datavis3d/rainfall/main.cpp +++ b/examples/datavis3d/rainfall/main.cpp @@ -80,7 +80,7 @@ ChartDataGenerator::ChartDataGenerator(Q3DBars *rainfall) m_chart->setBarType(Q3DBars::Cylinders, false); // Set selection mode to bar and column - //m_chart->setSelectionMode(Q3DBars::BarAndColumn); +// m_chart->setSelectionMode(Q3DBars::BarAndColumn); m_chart->setSelectionMode(Q3DBars::ZoomColumn); // Set theme @@ -109,198 +109,198 @@ void ChartDataGenerator::addDataSet() QVector< QVector<QDataItem*> > data; QVector<QDataItem*> row; // 2000 - row.append(new QDataItem(72, "mm, January 2000")); - row.append(new QDataItem(47, "mm, February 2000")); - row.append(new QDataItem(37, "mm, March 2000")); - row.append(new QDataItem(79, "mm, April 2000")); - row.append(new QDataItem(42, "mm, May 2000")); - row.append(new QDataItem(73, "mm, June 2000")); - row.append(new QDataItem(94, "mm, July 2000")); - row.append(new QDataItem(37, "mm, August 2000")); - row.append(new QDataItem(17, "mm, September 2000")); - row.append(new QDataItem(69, "mm, October 2000")); - row.append(new QDataItem(42, "mm, November 2000")); - row.append(new QDataItem(42, "mm, December 2000")); + row.append(new QDataItem(72, "mm"));//, January 2000")); + row.append(new QDataItem(47, "mm"));//, February 2000")); + row.append(new QDataItem(37, "mm"));//, March 2000")); + row.append(new QDataItem(79, "mm"));//, April 2000")); + row.append(new QDataItem(42, "mm"));//, May 2000")); + row.append(new QDataItem(73, "mm"));//, June 2000")); + row.append(new QDataItem(94, "mm"));//, July 2000")); + row.append(new QDataItem(37, "mm"));//, August 2000")); + row.append(new QDataItem(17, "mm"));//, September 2000")); + row.append(new QDataItem(69, "mm"));//, October 2000")); + row.append(new QDataItem(42, "mm"));//, November 2000")); + row.append(new QDataItem(42, "mm"));//, December 2000")); data.append(row); row.clear(); // 2001 - row.append(new QDataItem(25, "mm, January 2001")); - row.append(new QDataItem(47, "mm, February 2001")); - row.append(new QDataItem(20, "mm, March 2001")); - row.append(new QDataItem(70, "mm, April 2001")); - row.append(new QDataItem(27, "mm, May 2001")); - row.append(new QDataItem(40, "mm, June 2001")); - row.append(new QDataItem(123, "mm, July 2001")); - row.append(new QDataItem(39, "mm, August 2001")); - row.append(new QDataItem(66, "mm, September 2001")); - row.append(new QDataItem(55, "mm, October 2001")); - row.append(new QDataItem(29, "mm, November 2001")); - row.append(new QDataItem(12, "mm, December 2001")); + row.append(new QDataItem(25, "mm"));//, January 2001")); + row.append(new QDataItem(47, "mm"));//, February 2001")); + row.append(new QDataItem(20, "mm"));//, March 2001")); + row.append(new QDataItem(70, "mm"));//, April 2001")); + row.append(new QDataItem(27, "mm"));//, May 2001")); + row.append(new QDataItem(40, "mm"));//, June 2001")); + row.append(new QDataItem(123, "mm"));//, July 2001")); + row.append(new QDataItem(39, "mm"));//, August 2001")); + row.append(new QDataItem(66, "mm"));//, September 2001")); + row.append(new QDataItem(55, "mm"));//, October 2001")); + row.append(new QDataItem(29, "mm"));//, November 2001")); + row.append(new QDataItem(12, "mm"));//, December 2001")); data.append(row); row.clear(); // 2002 - row.append(new QDataItem(24, "mm, January 2002")); - row.append(new QDataItem(45, "mm, February 2002")); - row.append(new QDataItem(27, "mm, March 2002")); - row.append(new QDataItem(30, "mm, April 2002")); - row.append(new QDataItem(16, "mm, May 2002")); - row.append(new QDataItem(98, "mm, June 2002")); - row.append(new QDataItem(122, "mm, July 2002")); - row.append(new QDataItem(20, "mm, August 2002")); - row.append(new QDataItem(50, "mm, September 2002")); - row.append(new QDataItem(24, "mm, October 2002")); - row.append(new QDataItem(22, "mm, November 2002")); - row.append(new QDataItem(12, "mm, December 2002")); + row.append(new QDataItem(24, "mm"));//, January 2002")); + row.append(new QDataItem(45, "mm"));//, February 2002")); + row.append(new QDataItem(27, "mm"));//, March 2002")); + row.append(new QDataItem(30, "mm"));//, April 2002")); + row.append(new QDataItem(16, "mm"));//, May 2002")); + row.append(new QDataItem(98, "mm"));//, June 2002")); + row.append(new QDataItem(122, "mm"));//, July 2002")); + row.append(new QDataItem(20, "mm"));//, August 2002")); + row.append(new QDataItem(50, "mm"));//, September 2002")); + row.append(new QDataItem(24, "mm"));//, October 2002")); + row.append(new QDataItem(22, "mm"));//, November 2002")); + row.append(new QDataItem(12, "mm"));//, December 2002")); data.append(row); row.clear(); // 2003 - row.append(new QDataItem(43, "mm, January 2003")); - row.append(new QDataItem(17, "mm, February 2003")); - row.append(new QDataItem(26, "mm, March 2003")); - row.append(new QDataItem(22, "mm, April 2003")); - row.append(new QDataItem(60, "mm, May 2003")); - row.append(new QDataItem(14, "mm, June 2003")); - row.append(new QDataItem(86, "mm, July 2003")); - row.append(new QDataItem(77, "mm, August 2003")); - row.append(new QDataItem(69, "mm, September 2003")); - row.append(new QDataItem(49, "mm, October 2003")); - row.append(new QDataItem(23, "mm, November 2003")); - row.append(new QDataItem(44, "mm, December 2003")); + row.append(new QDataItem(43, "mm"));//, January 2003")); + row.append(new QDataItem(17, "mm"));//, February 2003")); + row.append(new QDataItem(26, "mm"));//, March 2003")); + row.append(new QDataItem(22, "mm"));//, April 2003")); + row.append(new QDataItem(60, "mm"));//, May 2003")); + row.append(new QDataItem(14, "mm"));//, June 2003")); + row.append(new QDataItem(86, "mm"));//, July 2003")); + row.append(new QDataItem(77, "mm"));//, August 2003")); + row.append(new QDataItem(69, "mm"));//, September 2003")); + row.append(new QDataItem(49, "mm"));//, October 2003")); + row.append(new QDataItem(23, "mm"));//, November 2003")); + row.append(new QDataItem(44, "mm"));//, December 2003")); data.append(row); row.clear(); // 2004 - row.append(new QDataItem(15, "mm, January 2004")); - row.append(new QDataItem(19, "mm, February 2004")); - row.append(new QDataItem(10, "mm, March 2004")); - row.append(new QDataItem(11, "mm, April 2004")); - row.append(new QDataItem(41, "mm, May 2004")); - row.append(new QDataItem(29, "mm, June 2004")); - row.append(new QDataItem(49, "mm, July 2004")); - row.append(new QDataItem(72, "mm, August 2004")); - row.append(new QDataItem(50, "mm, September 2004")); - row.append(new QDataItem(18, "mm, October 2004")); - row.append(new QDataItem(19, "mm, November 2004")); - row.append(new QDataItem(40, "mm, December 2004")); + row.append(new QDataItem(15, "mm"));//, January 2004")); + row.append(new QDataItem(19, "mm"));//, February 2004")); + row.append(new QDataItem(10, "mm"));//, March 2004")); + row.append(new QDataItem(11, "mm"));//, April 2004")); + row.append(new QDataItem(41, "mm"));//, May 2004")); + row.append(new QDataItem(29, "mm"));//, June 2004")); + row.append(new QDataItem(49, "mm"));//, July 2004")); + row.append(new QDataItem(72, "mm"));//, August 2004")); + row.append(new QDataItem(50, "mm"));//, September 2004")); + row.append(new QDataItem(18, "mm"));//, October 2004")); + row.append(new QDataItem(19, "mm"));//, November 2004")); + row.append(new QDataItem(40, "mm"));//, December 2004")); data.append(row); row.clear(); // 2005 - row.append(new QDataItem(60, "mm, January 2005")); - row.append(new QDataItem(24, "mm, February 2005")); - row.append(new QDataItem(12, "mm, March 2005")); - row.append(new QDataItem(50, "mm, April 2005")); - row.append(new QDataItem(88, "mm, May 2005")); - row.append(new QDataItem(32, "mm, June 2005")); - row.append(new QDataItem(76, "mm, July 2005")); - row.append(new QDataItem(55, "mm, August 2005")); - row.append(new QDataItem(92, "mm, September 2005")); - row.append(new QDataItem(35, "mm, October 2005")); - row.append(new QDataItem(105, "mm, November 2005")); - row.append(new QDataItem(59, "mm, December 2005")); + row.append(new QDataItem(60, "mm"));//, January 2005")); + row.append(new QDataItem(24, "mm"));//, February 2005")); + row.append(new QDataItem(12, "mm"));//, March 2005")); + row.append(new QDataItem(50, "mm"));//, April 2005")); + row.append(new QDataItem(88, "mm"));//, May 2005")); + row.append(new QDataItem(32, "mm"));//, June 2005")); + row.append(new QDataItem(76, "mm"));//, July 2005")); + row.append(new QDataItem(55, "mm"));//, August 2005")); + row.append(new QDataItem(92, "mm"));//, September 2005")); + row.append(new QDataItem(35, "mm"));//, October 2005")); + row.append(new QDataItem(105, "mm"));//, November 2005")); + row.append(new QDataItem(59, "mm"));//, December 2005")); data.append(row); row.clear(); // 2006 - row.append(new QDataItem(27, "mm, January 2006")); - row.append(new QDataItem(18, "mm, February 2006")); - row.append(new QDataItem(17, "mm, March 2006")); - row.append(new QDataItem(26, "mm, April 2006")); - row.append(new QDataItem(24, "mm, May 2006")); - row.append(new QDataItem(18, "mm, June 2006")); - row.append(new QDataItem(35, "mm, July 2006")); - row.append(new QDataItem(28, "mm, August 2006")); - row.append(new QDataItem(80, "mm, September 2006")); - row.append(new QDataItem(52, "mm, October 2006")); - row.append(new QDataItem(43, "mm, November 2006")); - row.append(new QDataItem(44, "mm, December 2006")); + row.append(new QDataItem(27, "mm"));//, January 2006")); + row.append(new QDataItem(18, "mm"));//, February 2006")); + row.append(new QDataItem(17, "mm"));//, March 2006")); + row.append(new QDataItem(26, "mm"));//, April 2006")); + row.append(new QDataItem(24, "mm"));//, May 2006")); + row.append(new QDataItem(18, "mm"));//, June 2006")); + row.append(new QDataItem(35, "mm"));//, July 2006")); + row.append(new QDataItem(28, "mm"));//, August 2006")); + row.append(new QDataItem(80, "mm"));//, September 2006")); + row.append(new QDataItem(52, "mm"));//, October 2006")); + row.append(new QDataItem(43, "mm"));//, November 2006")); + row.append(new QDataItem(44, "mm"));//, December 2006")); data.append(row); row.clear(); // 2007 - row.append(new QDataItem(41, "mm, January 2007")); - row.append(new QDataItem(21, "mm, February 2007")); - row.append(new QDataItem(30, "mm, March 2007")); - row.append(new QDataItem(20, "mm, April 2007")); - row.append(new QDataItem(53, "mm, May 2007")); - row.append(new QDataItem(29, "mm, June 2007")); - row.append(new QDataItem(139, "mm, July 2007")); - row.append(new QDataItem(52, "mm, August 2007")); - row.append(new QDataItem(51, "mm, September 2007")); - row.append(new QDataItem(24, "mm, October 2007")); - row.append(new QDataItem(47, "mm, November 2007")); - row.append(new QDataItem(33, "mm, December 2007")); + row.append(new QDataItem(41, "mm"));//, January 2007")); + row.append(new QDataItem(21, "mm"));//, February 2007")); + row.append(new QDataItem(30, "mm"));//, March 2007")); + row.append(new QDataItem(20, "mm"));//, April 2007")); + row.append(new QDataItem(53, "mm"));//, May 2007")); + row.append(new QDataItem(29, "mm"));//, June 2007")); + row.append(new QDataItem(139, "mm"));//, July 2007")); + row.append(new QDataItem(52, "mm"));//, August 2007")); + row.append(new QDataItem(51, "mm"));//, September 2007")); + row.append(new QDataItem(24, "mm"));//, October 2007")); + row.append(new QDataItem(47, "mm"));//, November 2007")); + row.append(new QDataItem(33, "mm"));//, December 2007")); data.append(row); row.clear(); // 2008 - row.append(new QDataItem(67, "mm, January 2008")); - row.append(new QDataItem(19, "mm, February 2008")); - row.append(new QDataItem(30, "mm, March 2008")); - row.append(new QDataItem(31, "mm, April 2008")); - row.append(new QDataItem(29, "mm, May 2008")); - row.append(new QDataItem(79, "mm, June 2008")); - row.append(new QDataItem(75, "mm, July 2008")); - row.append(new QDataItem(99, "mm, August 2008")); - row.append(new QDataItem(34, "mm, September 2008")); - row.append(new QDataItem(52, "mm, October 2008")); - row.append(new QDataItem(60, "mm, November 2008")); - row.append(new QDataItem(20, "mm, December 2008")); + row.append(new QDataItem(67, "mm"));//, January 2008")); + row.append(new QDataItem(19, "mm"));//, February 2008")); + row.append(new QDataItem(30, "mm"));//, March 2008")); + row.append(new QDataItem(31, "mm"));//, April 2008")); + row.append(new QDataItem(29, "mm"));//, May 2008")); + row.append(new QDataItem(79, "mm"));//, June 2008")); + row.append(new QDataItem(75, "mm"));//, July 2008")); + row.append(new QDataItem(99, "mm"));//, August 2008")); + row.append(new QDataItem(34, "mm"));//, September 2008")); + row.append(new QDataItem(52, "mm"));//, October 2008")); + row.append(new QDataItem(60, "mm"));//, November 2008")); + row.append(new QDataItem(20, "mm"));//, December 2008")); data.append(row); row.clear(); // 2009 - row.append(new QDataItem(9, "mm, January 2009")); - row.append(new QDataItem(22, "mm, February 2009")); - row.append(new QDataItem(11, "mm, March 2009")); - row.append(new QDataItem(10, "mm, April 2009")); - row.append(new QDataItem(69, "mm, May 2009")); - row.append(new QDataItem(30, "mm, June 2009")); - row.append(new QDataItem(78, "mm, July 2009")); - row.append(new QDataItem(93, "mm, August 2009")); - row.append(new QDataItem(70, "mm, September 2009")); - row.append(new QDataItem(32, "mm, October 2009")); - row.append(new QDataItem(56, "mm, November 2009")); - row.append(new QDataItem(23, "mm, December 2009")); + row.append(new QDataItem(9, "mm"));//, January 2009")); + row.append(new QDataItem(22, "mm"));//, February 2009")); + row.append(new QDataItem(11, "mm"));//, March 2009")); + row.append(new QDataItem(10, "mm"));//, April 2009")); + row.append(new QDataItem(69, "mm"));//, May 2009")); + row.append(new QDataItem(30, "mm"));//, June 2009")); + row.append(new QDataItem(78, "mm"));//, July 2009")); + row.append(new QDataItem(93, "mm"));//, August 2009")); + row.append(new QDataItem(70, "mm"));//, September 2009")); + row.append(new QDataItem(32, "mm"));//, October 2009")); + row.append(new QDataItem(56, "mm"));//, November 2009")); + row.append(new QDataItem(23, "mm"));//, December 2009")); data.append(row); row.clear(); // 2010 - row.append(new QDataItem(12, "mm, January 2010")); - row.append(new QDataItem(28, "mm, February 2010")); - row.append(new QDataItem(55, "mm, March 2010")); - row.append(new QDataItem(20, "mm, April 2010")); - row.append(new QDataItem(65, "mm, May 2010")); - row.append(new QDataItem(26, "mm, June 2010")); - row.append(new QDataItem(134, "mm, July 2010")); - row.append(new QDataItem(57, "mm, August 2010")); - row.append(new QDataItem(51, "mm, September 2010")); - row.append(new QDataItem(53, "mm, October 2010")); - row.append(new QDataItem(8, "mm, November 2010")); - row.append(new QDataItem(9, "mm, December 2010")); + row.append(new QDataItem(12, "mm"));//, January 2010")); + row.append(new QDataItem(28, "mm"));//, February 2010")); + row.append(new QDataItem(55, "mm"));//, March 2010")); + row.append(new QDataItem(20, "mm"));//, April 2010")); + row.append(new QDataItem(65, "mm"));//, May 2010")); + row.append(new QDataItem(26, "mm"));//, June 2010")); + row.append(new QDataItem(134, "mm"));//, July 2010")); + row.append(new QDataItem(57, "mm"));//, August 2010")); + row.append(new QDataItem(51, "mm"));//, September 2010")); + row.append(new QDataItem(53, "mm"));//, October 2010")); + row.append(new QDataItem(8, "mm"));//, November 2010")); + row.append(new QDataItem(9, "mm"));//, December 2010")); data.append(row); row.clear(); // 2011 - row.append(new QDataItem(34, "mm, January 2011")); - row.append(new QDataItem(20, "mm, February 2011")); - row.append(new QDataItem(30, "mm, March 2011")); - row.append(new QDataItem(31, "mm, April 2011")); - row.append(new QDataItem(42, "mm, May 2011")); - row.append(new QDataItem(78, "mm, June 2011")); - row.append(new QDataItem(85, "mm, July 2011")); - row.append(new QDataItem(33, "mm, August 2011")); - row.append(new QDataItem(42, "mm, September 2011")); - row.append(new QDataItem(87, "mm, October 2011")); - row.append(new QDataItem(41, "mm, November 2011")); - row.append(new QDataItem(72, "mm, December 2011")); + row.append(new QDataItem(34, "mm"));//, January 2011")); + row.append(new QDataItem(20, "mm"));//, February 2011")); + row.append(new QDataItem(30, "mm"));//, March 2011")); + row.append(new QDataItem(31, "mm"));//, April 2011")); + row.append(new QDataItem(42, "mm"));//, May 2011")); + row.append(new QDataItem(78, "mm"));//, June 2011")); + row.append(new QDataItem(85, "mm"));//, July 2011")); + row.append(new QDataItem(33, "mm"));//, August 2011")); + row.append(new QDataItem(42, "mm"));//, September 2011")); + row.append(new QDataItem(87, "mm"));//, October 2011")); + row.append(new QDataItem(41, "mm"));//, November 2011")); + row.append(new QDataItem(72, "mm"));//, December 2011")); data.append(row); row.clear(); // 2012 - row.append(new QDataItem(32, "mm, January 2012")); - row.append(new QDataItem(42, "mm, February 2012")); - row.append(new QDataItem(30, "mm, March 2012")); - row.append(new QDataItem(50, "mm, April 2012")); - row.append(new QDataItem(30, "mm, May 2012")); - row.append(new QDataItem(70, "mm, June 2012")); - row.append(new QDataItem(52, "mm, July 2012")); - row.append(new QDataItem(20, "mm, August 2012")); - row.append(new QDataItem(99, "mm, September 2012")); - row.append(new QDataItem(70, "mm, October 2012")); - row.append(new QDataItem(69, "mm, November 2012")); - row.append(new QDataItem(49, "mm, December 2012")); + row.append(new QDataItem(32, "mm"));//, January 2012")); + row.append(new QDataItem(42, "mm"));//, February 2012")); + row.append(new QDataItem(30, "mm"));//, March 2012")); + row.append(new QDataItem(50, "mm"));//, April 2012")); + row.append(new QDataItem(30, "mm"));//, May 2012")); + row.append(new QDataItem(70, "mm"));//, June 2012")); + row.append(new QDataItem(52, "mm"));//, July 2012")); + row.append(new QDataItem(20, "mm"));//, August 2012")); + row.append(new QDataItem(99, "mm"));//, September 2012")); + row.append(new QDataItem(70, "mm"));//, October 2012")); + row.append(new QDataItem(69, "mm"));//, November 2012")); + row.append(new QDataItem(49, "mm"));//, December 2012")); data.append(row); row.clear(); // Set up row and column names diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp index 6f29268e..6affa410 100644 --- a/src/datavis3d/engine/q3dbars.cpp +++ b/src/datavis3d/engine/q3dbars.cpp @@ -451,34 +451,55 @@ void Q3DBars::drawZoomScene() } // Draw labels for axes - // TODO: label of selected row/column above the bars - // TODO: label of selected column/row below the bar labels + QDataItem *dummyItem = NULL; + LabelItem x; + LabelItem z; + LabelItem y; + d_ptr->m_dataSet->d_ptr->axisLabelItems(&x, &z, &y); + LabelItem zoomSelectionLabel = d_ptr->m_zoomSelection->d_ptr->labelItem(); + if (ZoomRow == d_ptr->m_selectionMode) { + drawLabel(*dummyItem, zoomSelectionLabel.textureId(), zoomSelectionLabel.size(), viewMatrix, + projectionMatrix, false, 0.0f, LabelTop); + drawLabel(*dummyItem, z.textureId(), z.size(), viewMatrix, projectionMatrix, false, 0.0f, + LabelBottom); + } else { + drawLabel(*dummyItem, x.textureId(), x.size(), viewMatrix, projectionMatrix, false, 0.0f, + LabelBottom); + drawLabel(*dummyItem, zoomSelectionLabel.textureId(), zoomSelectionLabel.size(), viewMatrix, + projectionMatrix, false, 0.0f, LabelTop); + } + drawLabel(*dummyItem, y.textureId(), y.size(), viewMatrix, projectionMatrix, false, 90.0f, + LabelLeft); // Draw labels for bars for (int col = 0; col < d_ptr->m_zoomSelection->d_ptr->row().size(); col++) { QDataItem *item = d_ptr->m_zoomSelection->d_ptr->getItem(col); // Draw values drawLabel(*item, item->d_ptr->textureId(), item->d_ptr->labelSize(), viewMatrix, - projectionMatrix, false, 0.0f, - LabelOver); + projectionMatrix, false, 0.0f, LabelOver); // Draw labels + // TODO: If there are 0 -valued bars, labeling goes wrong. Fix it. LabelItem labelItem; if (ZoomRow == d_ptr->m_selectionMode) { - // TODO: Testi, piirrä axislabel kokeeksi -// LabelItem x, z, y; -// d_ptr->m_dataSet->d_ptr->axisLabelItems(&x, &z, &y); -// drawLabel(*item, x.textureId(), x.size(), -// viewMatrix, projectionMatrix, false, -45.0f, LabelBelow); - if (d_ptr->m_dataSet->d_ptr->columnLabelItems().size() > col) - labelItem = d_ptr->m_dataSet->d_ptr->columnLabelItems().at(col); + if (d_ptr->m_dataSet->d_ptr->columnLabelItems().size() > col) { + // If draw order of bars is flipped, label draw order should be too + if (d_ptr->m_xFlipped) { + labelItem = d_ptr->m_dataSet->d_ptr->columnLabelItems().at( + d_ptr->m_dataSet->d_ptr->columnLabelItems().size() - col - 1); + } else { + labelItem = d_ptr->m_dataSet->d_ptr->columnLabelItems().at(col); + } + } } else { - // TODO: Testi, piirrä axislabel kokeeksi -// LabelItem x, z, y; -// d_ptr->m_dataSet->d_ptr->axisLabelItems(&x, &z, &y); -// drawLabel(*item, z.textureId(), z.size(), -// viewMatrix, projectionMatrix, false, -45.0f, LabelBelow); - if (d_ptr->m_dataSet->d_ptr->rowLabelItems().size() > col) - labelItem = d_ptr->m_dataSet->d_ptr->rowLabelItems().at(col); + if (d_ptr->m_dataSet->d_ptr->rowLabelItems().size() > col) { + // If draw order of bars is flipped, label draw order should be too + if (d_ptr->m_zFlipped) { + labelItem = d_ptr->m_dataSet->d_ptr->rowLabelItems().at( + d_ptr->m_dataSet->d_ptr->rowLabelItems().size() - col - 1); + } else { + labelItem = d_ptr->m_dataSet->d_ptr->rowLabelItems().at(col); + } + } } // Check if there is a label before drawing if (labelItem.textureId() > 0) { @@ -542,19 +563,23 @@ void Q3DBars::drawScene() startRow = 0; stopRow = d_ptr->m_sampleCount.y(); stepRow = 1; + d_ptr->m_zFlipped = false; } else { startRow = d_ptr->m_sampleCount.y() - 1; stopRow = -1; stepRow = -1; + d_ptr->m_zFlipped = true; } if (viewMatrix.row(0).z() < 0) { startBar = 0; stopBar = d_ptr->m_sampleCount.x(); stepBar = 1; + d_ptr->m_xFlipped = false; } else { startBar = d_ptr->m_sampleCount.x() - 1; stopBar = -1; stepBar = -1; + d_ptr->m_xFlipped = true; } // calculate background rotation based on view matrix rotation @@ -801,6 +826,10 @@ void Q3DBars::drawScene() if (!d_ptr->m_zoomActivated && ZoomRow == d_ptr->m_selectionMode) { item->d_ptr->setTranslation(modelMatrix.column(3).toVector3D()); d_ptr->m_zoomSelection->addItem(item); + d_ptr->m_zoomSelection->d_ptr->setLabelItem( + d_ptr->m_dataSet->d_ptr->rowLabelItems().at( + d_ptr->m_dataSet->d_ptr->rowLabelItems().size() + - row - 1)); } break; } @@ -812,6 +841,10 @@ void Q3DBars::drawScene() if (!d_ptr->m_zoomActivated && ZoomColumn == d_ptr->m_selectionMode) { item->d_ptr->setTranslation(modelMatrix.column(3).toVector3D()); d_ptr->m_zoomSelection->addItem(item); + d_ptr->m_zoomSelection->d_ptr->setLabelItem( + d_ptr->m_dataSet->d_ptr->columnLabelItems().at( + d_ptr->m_dataSet->d_ptr->columnLabelItems().size() + - bar - 1)); } break; } @@ -900,7 +933,9 @@ void Q3DBars::drawLabel(const QDataItem &item, GLuint textureId, QSize textureSi // Draw label QMatrix4x4 modelMatrix; QMatrix4x4 MVPMatrix; - qreal yPosition = -1.5f; + GLfloat xPosition; + GLfloat yPosition; + GLfloat zPosition = zComp; switch (position) { case Q3DBars::LabelBelow: { @@ -933,14 +968,41 @@ void Q3DBars::drawLabel(const QDataItem &item, GLuint textureId, QSize textureSi yPosition -= 0.5f; break; } + case Q3DBars::LabelBottom: + { + yPosition = -2.0f; // TODO: Calculate from scene + xPosition = 0.0f; + break; + } + case Q3DBars::LabelTop: + { + yPosition = 0.75f; // TODO: Calculate from scene + xPosition = 0.0f; + break; + } + case Q3DBars::LabelLeft: + { + yPosition = -0.625f; // TODO: Calculate from scene + xPosition = -2.5f; // TODO: Calculate from scene + break; + } + case Q3DBars::LabelRight: + { + yPosition = -0.625f; // TODO: Calculate from scene + xPosition = 2.5f; // TODO: Calculate from scene + break; + } + } + + if (position < LabelBottom) { + xPosition = item.d_ptr->translation().x(); + if (useDepth) + zPosition = item.d_ptr->translation().z(); + else if (ZoomColumn == d_ptr->m_selectionMode) + xPosition = -(item.d_ptr->translation().z()) + zComp; // flip first to left } - qreal zPosition = zComp; - qreal xPosition = item.d_ptr->translation().x(); - if (useDepth) - zPosition = item.d_ptr->translation().z(); - else if (ZoomColumn == d_ptr->m_selectionMode) - xPosition = -(item.d_ptr->translation().z()) + zComp; // flip first to left + // Position label modelMatrix.translate(xPosition, yPosition, zPosition); // Rotate @@ -1386,7 +1448,9 @@ Q3DBarsPrivate::Q3DBarsPrivate(Q3DBars *q) m_labelTransparency(Q3DBars::TransparencyNone), m_fontSize(10.0f), m_font(QFont(QStringLiteral("Arial"))), - m_drawer(new Drawer(*m_theme, m_font, m_labelTransparency)) + m_drawer(new Drawer(*m_theme, m_font, m_labelTransparency)), + m_xFlipped(false), + m_zFlipped(false) { m_dataSet->d_ptr->setDrawer(m_drawer); } diff --git a/src/datavis3d/engine/q3dbars.h b/src/datavis3d/engine/q3dbars.h index 314e6a03..ef02eee8 100644 --- a/src/datavis3d/engine/q3dbars.h +++ b/src/datavis3d/engine/q3dbars.h @@ -114,12 +114,17 @@ public: ZoomColumn }; + // TODO: Should this be moved to Q3DBarsPrivate? Not for use via API directly? enum LabelPosition { LabelBelow = 0, LabelLow, LabelMid, LabelHigh, - LabelOver + LabelOver, + LabelBottom, // Absolute positions from here onward, used for axes (QDataItem is ignored) + LabelTop, + LabelLeft, + LabelRight }; public: diff --git a/src/datavis3d/engine/q3dbars_p.h b/src/datavis3d/engine/q3dbars_p.h index cb13aea1..bf50367e 100644 --- a/src/datavis3d/engine/q3dbars_p.h +++ b/src/datavis3d/engine/q3dbars_p.h @@ -153,6 +153,8 @@ public: GLfloat m_fontSize; QFont m_font; Drawer *m_drawer; + bool m_xFlipped; + bool m_zFlipped; }; QTCOMMERCIALDATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/engine/qdatarow.cpp b/src/datavis3d/engine/qdatarow.cpp index 2146aabe..fee4bdc2 100644 --- a/src/datavis3d/engine/qdatarow.cpp +++ b/src/datavis3d/engine/qdatarow.cpp @@ -71,7 +71,8 @@ void QDataRow::addItem(QDataItem *item) QDataRowPrivate::QDataRowPrivate(QDataRow *q, const QString &label) : q_ptr(q), - m_label(label) + m_label(label), + m_labelItem(LabelItem()) { } @@ -129,4 +130,19 @@ float QDataRowPrivate::highestValue() return max; } +QString QDataRowPrivate::label() +{ + return m_label; +} + +void QDataRowPrivate::setLabelItem(const LabelItem &item) +{ + m_labelItem = item; +} + +LabelItem QDataRowPrivate::labelItem() +{ + return m_labelItem; +} + QTCOMMERCIALDATAVIS3D_END_NAMESPACE diff --git a/src/datavis3d/engine/qdatarow_p.h b/src/datavis3d/engine/qdatarow_p.h index c614af81..50dae99f 100644 --- a/src/datavis3d/engine/qdatarow_p.h +++ b/src/datavis3d/engine/qdatarow_p.h @@ -54,6 +54,7 @@ #include "qdatavis3dglobal.h" #include "qdatarow.h" +#include "labelitem_p.h" #include <QVector> #include <QString> @@ -63,7 +64,7 @@ class QDataItem; class QDataRowPrivate { - public: +public: explicit QDataRowPrivate(QDataRow *q, const QString &label = QString()); ~QDataRowPrivate(); @@ -73,11 +74,15 @@ class QDataRowPrivate QDataItem *getItem(int itemIndex); void verifySize(int size); float highestValue(); + QString label(); + void setLabelItem(const LabelItem &item); + LabelItem labelItem(); - private: +private: QDataRow *q_ptr; QVector<QDataItem*> m_row; QString m_label; + LabelItem m_labelItem; friend class QDataRow; }; diff --git a/src/datavis3d/engine/qdataset.cpp b/src/datavis3d/engine/qdataset.cpp index f32507b6..6a3cafe7 100644 --- a/src/datavis3d/engine/qdataset.cpp +++ b/src/datavis3d/engine/qdataset.cpp @@ -80,13 +80,13 @@ void QDataSet::setLabels(const QString &xAxis, d_ptr->m_zAxis = zAxis; // Generate axis label texture if (d_ptr->m_drawer) - d_ptr->m_drawer->generateLabelItem(d_ptr->m_zAxisItem, xAxis); + d_ptr->m_drawer->generateLabelItem(d_ptr->m_zAxisItem, zAxis); } if (yAxis != empty && d_ptr->m_yAxis != yAxis) { d_ptr->m_yAxis = yAxis; // Generate axis label texture if (d_ptr->m_drawer) - d_ptr->m_drawer->generateLabelItem(d_ptr->m_yAxisItem, xAxis); + d_ptr->m_drawer->generateLabelItem(d_ptr->m_yAxisItem, yAxis); } d_ptr->m_labelsRow = labelsRow; d_ptr->m_labelsColumn = labelsColumn; @@ -251,9 +251,13 @@ void QDataSetPrivate::updateTextures() m_drawer->generateLabelItem(m_zAxisItem, m_zAxis); m_drawer->generateLabelItem(m_yAxisItem, m_yAxis); for (int itemCount = 0; itemCount < m_labelsColumn.size(); itemCount++) { + if (m_labelItemsColumn.size() < itemCount + 1) + m_labelItemsColumn.append(LabelItem()); m_drawer->generateLabelItem(m_labelItemsColumn[itemCount], m_labelsColumn.at(itemCount)); } for (int itemCount = 0; itemCount < m_labelsRow.size(); itemCount++) { + if (m_labelItemsRow.size() < itemCount + 1) + m_labelItemsRow.append(LabelItem()); m_drawer->generateLabelItem(m_labelItemsRow[itemCount], m_labelsRow.at(itemCount)); } } |