107 Eigen::Map<Eigen::Vector3f>(default_eyes.left) = Eigen::Vector3f(-0.2f, 0.0f, 0.0f);
108 Eigen::Map<Eigen::Vector3f>(default_eyes.right) = Eigen::Vector3f( 0.2f, 0.0f, 0.0f);
109 Eigen::Map<Eigen::Vector3f>(default_eyes.left_up) = Eigen::Vector3f(0.0f, 0.0f, 1.0f);
110 Eigen::Map<Eigen::Vector3f>(default_eyes.right_up) = Eigen::Vector3f(0.0f, 0.0f, 1.0f);
123 Eigen::Vector3f::Map(
rot) = Eigen::Vector3f::Zero();
124 Eigen::Vector3f::Map(
move) = Eigen::Vector3f::Zero();
125 Eigen::Vector3f::Map(
eye) = Eigen::Vector3f(1.0f, 0.0f, 0.0f);
126 Eigen::Vector3f::Map(
up) = Eigen::Vector3f(0.0f, 0.0f, 1.0f);
128 Eigen::Vector3f::Map(
bg_color) = Eigen::Vector3f::Zero();
129 Eigen::Vector3f::Map(
text_color) = Eigen::Vector3f::Ones();
143 QString pathLh = QString(
"%1/%2/surf/%3.%4").arg(subjects_dir).arg(subject_id).arg(
"lh").arg(surf);
144 QString pathLhCurv = QString(
"%1/%2/surf/%3.%4").arg(subjects_dir).arg(subject_id).arg(
"lh").arg(
"curv");
145 QString pathRh = QString(
"%1/%2/surf/%3.%4").arg(subjects_dir).arg(subject_id).arg(
"rh").arg(surf);
146 QString pathRhCurv = QString(
"%1/%2/surf/%3.%4").arg(subjects_dir).arg(subject_id).arg(
"rh").arg(
"curv");
148 qInfo(
"Loading surface %s ...\n", pathLh.toUtf8().constData());
154 left->add_uniform_curv();
157 qInfo(
"Loading surface %s ...\n", pathRh.toUtf8().constData());
163 right->add_uniform_curv();
166 auto result = std::make_unique<MNEMshDisplaySurfaceSet>(2);
168 result->surfs[0] = std::make_unique<MNEMshDisplaySurface>();
169 result->surfs[1] = std::make_unique<MNEMshDisplaySurface>();
171 result->active[0] =
true;
172 result->active[1] =
false;
173 result->drawable[0] =
true;
174 result->drawable[1] =
true;
176 auto* pThis = result->surfs[0].get();
177 pThis->filename = pathLh;
179 pThis->id = SURF_LEFT_HEMI;
180 pThis->subj = subject_id;
181 pThis->surf_name = surf;
183 pThis->decide_surface_extent(
"Left hemisphere");
184 pThis->decide_curv_display(surf);
185 pThis->setup_curvature_colors();
187 pThis = result->surfs[1].get();
188 pThis->filename = pathRh;
190 pThis->id = SURF_RIGHT_HEMI;
191 pThis->subj = subject_id;
192 pThis->surf_name = surf;
194 pThis->decide_surface_extent(
"Right hemisphere");
195 pThis->decide_curv_display(surf);
196 pThis->setup_curvature_colors();
198 result->apply_left_right_eyes();
199 result->setup_current_lights();
208 const QString& bemname,
212 qInfo(
"Loading BEM surface %s (id = %d) from %s ...\n",
213 bemname.toUtf8().constData(), kind, filepath.toUtf8().constData());
220 surf->compute_surface_cm();
221 double sum = surf->sum_solids(Eigen::Map<const Eigen::Vector3f>(surf->cm)) / (4*
M_PI);
222 if (std::fabs(sum - 1.0) > 1e-4) {
223 qCritical(
"%s surface is not closed "
224 "(sum of solid angles = %g * 4*PI).",
225 bemname.toUtf8().constData(), sum);
230 auto newSurf = std::make_unique<MNEMshDisplaySurface>();
231 newSurf->filename = filepath;
235 newSurf->surf_name = bemname;
240 newSurf->decide_surface_extent(bemname);
255 for (
int k = 0; k <
nsurf; k++) {
256 auto& surf =
surfs[k];
257 if (surf->id == newSurf->id) {
258 newSurf->transparent = surf->transparent;
259 newSurf->show_aux_data = surf->show_aux_data;
260 surfs[k] = std::move(newSurf);
263 this->drawable[k] =
false;
270 surfs.push_back(std::move(newSurf));
274 this->drawable.conservativeResize(
nsurf+1);
287 if (neyes == 0 || current_eyes < 0 || current_eyes > neyes-1) {
288 eyes = &default_eyes;
290 eyes = all_eyes+current_eyes;
293 for (
int k = 0; k <
nsurf; k++) {
294 auto* surf =
surfs[k].get();
296 case SURF_LEFT_HEMI :
297 case SURF_LEFT_MORPH_HEMI :
298 surf->eye = Eigen::Vector3f::Map(eyes->
left);
299 surf->up = Eigen::Vector3f::Map(eyes->
left_up);
301 case SURF_RIGHT_HEMI :
302 case SURF_RIGHT_MORPH_HEMI :
303 surf->eye = Eigen::Vector3f::Map(eyes->
right);
304 surf->up = Eigen::Vector3f::Map(eyes->
right_up);
307 surf->eye = Eigen::Vector3f::Map(eyes->
left);
308 surf->up = Eigen::Vector3f::Map(eyes->
left_up);
342 if (!custom_lights) {
343 custom_lights = std::make_unique<MNEMshLightSet>();
345 custom_lights->lights.push_back(std::make_unique<MNEMshLight>(
true, 0.0f, 0.0f, 1.0f, 0.8f, 0.8f, 0.8f));
346 custom_lights->lights.push_back(std::make_unique<MNEMshLight>(
true, 0.0f, 0.0f, -1.0f, 0.8f, 0.8f, 0.8f));
347 custom_lights->lights.push_back(std::make_unique<MNEMshLight>(
true, 0.6f, -1.0f, -1.0f, 0.6f, 0.6f, 0.6f));
348 custom_lights->lights.push_back(std::make_unique<MNEMshLight>(
true, -0.6f, -1.0f, -1.0f, 0.6f, 0.6f, 0.6f));
349 custom_lights->lights.push_back(std::make_unique<MNEMshLight>(
true, 1.0f, 0.0f, 0.0f, 0.8f, 0.8f, 0.8f));
350 custom_lights->lights.push_back(std::make_unique<MNEMshLight>(
true, -1.0f, 0.0f, 0.0f, 0.8f, 0.8f, 0.8f));
351 custom_lights->lights.push_back(std::make_unique<MNEMshLight>(
true, 0.0f, 1.0f, 0.5f, 0.6f, 0.6f, 0.6f));
352 custom_lights->lights.push_back(std::make_unique<MNEMshLight>(
false, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 1.0f));