| 44 | } |
| 45 | |
| 46 | std::string circles::data_string() { |
| 47 | std::stringstream ss; |
| 48 | ss.precision(10); |
| 49 | ss << std::fixed; |
| 50 | for (size_t i = 0; i < x_.size(); ++i) { |
| 51 | auto value_or_default = [](const std::vector<double> &v, |
| 52 | size_t index, double default_value) { |
| 53 | if (v.size() > index) { |
| 54 | return v[index]; |
| 55 | } else if (!v.empty()) { |
| 56 | return v[0]; |
| 57 | } else { |
| 58 | return default_value; |
| 59 | } |
| 60 | }; |
| 61 | if (color_.empty()) { |
| 62 | ss << " " << x_[i] << " " << y_[i] << " " |
| 63 | << value_or_default(radius_, i, 1) << " " |
| 64 | << value_or_default(start_angle_, i, 0) << " " |
| 65 | << value_or_default(end_angle_, i, 360) << "\n"; |
| 66 | } else { |
| 67 | ss << " " << x_[i] << " " << y_[i] << " " |
| 68 | << value_or_default(radius_, i, 1) << " " |
| 69 | << value_or_default(start_angle_, i, 0) << " " |
| 70 | << value_or_default(end_angle_, i, 360) << " " |
| 71 | << value_or_default(color_, i, 1) << "\n"; |
| 72 | } |
| 73 | } |
| 74 | ss << "e\n"; |
| 75 | if (labels_) { |
| 76 | ss << labels_->data_string(); |
| 77 | } |
| 78 | return ss.str(); |
| 79 | } |
| 80 | |
| 81 | bool circles::requires_colormap() { return true; } |
| 82 | |