| 114 | } |
| 115 | |
| 116 | std::string vectors::data_string() { |
| 117 | std::stringstream ss; |
| 118 | ss.precision(10); |
| 119 | ss << std::fixed; |
| 120 | if (visible_) { |
| 121 | for (size_t i = 0; i < v_data_.size(); ++i) { |
| 122 | double x_value = x_data_.size() > i ? x_data_[i] |
| 123 | : is_polar() ? 0 |
| 124 | : static_cast<double>(i + 1); |
| 125 | double y_value = y_data_.size() > i ? y_data_[i] : 0; |
| 126 | double z_value = z_data_.size() > i ? z_data_[i] : 0; |
| 127 | double u_value = u_data_.size() > i ? u_data_[i] : 0; |
| 128 | double v_value = v_data_.size() > i ? v_data_[i] : 0; |
| 129 | double w_value = w_data_.size() > i ? w_data_[i] : 0; |
| 130 | double c_value = c_data_.size() > i ? c_data_[i] : 0; |
| 131 | |
| 132 | bool is_end_of_series = |
| 133 | !std::isfinite(x_value) || !std::isfinite(y_value) || |
| 134 | !std::isfinite(z_value) || !std::isfinite(u_value) || |
| 135 | !std::isfinite(v_value) || !std::isfinite(w_value); |
| 136 | if (is_end_of_series) { |
| 137 | ss << " \n"; |
| 138 | continue; |
| 139 | } |
| 140 | |
| 141 | ss << " " << x_value; |
| 142 | ss << " " << y_value; |
| 143 | if (is_3d()) { |
| 144 | ss << " " << z_value; |
| 145 | } else if (parent_->is_3d()) { |
| 146 | ss << " " << 0.0; |
| 147 | } |
| 148 | |
| 149 | if (normalize_) { |
| 150 | double mag = |
| 151 | std::sqrt(u_value * u_value + v_value * v_value + |
| 152 | w_value * w_value); |
| 153 | if (mag != 0.0) { |
| 154 | u_value /= mag; |
| 155 | v_value /= mag; |
| 156 | w_value /= mag; |
| 157 | } |
| 158 | if (scale_ != 0.0) { |
| 159 | u_value *= scale_; |
| 160 | v_value *= scale_; |
| 161 | w_value *= scale_; |
| 162 | } |
| 163 | } |
| 164 | |
| 165 | ss << " " << u_value; |
| 166 | ss << " " << v_value; |
| 167 | if (is_3d()) { |
| 168 | ss << " " << w_value; |
| 169 | } else if (parent_->is_3d()) { |
| 170 | ss << " " << 0.0; |
| 171 | } |
| 172 | if (!c_data_.empty()) { |
| 173 | ss << " " << c_value; |