void LinkEvaluatorCameraId::eval(Property* src, Property* dst) throw (VoreenException) { CameraProperty* dstCast = static_cast<CameraProperty*>(dst); CameraProperty* srcCast = static_cast<CameraProperty*>(src); tgt::Camera cam = dstCast->get(); tgt::Camera srcCam = srcCast->get(); cam.setPosition(srcCam.getPosition()); cam.setFocus(srcCam.getFocus()); cam.setUpVector(srcCam.getUpVector()); cam.setFrustum(srcCam.getFrustum()); cam.setProjectionMode(srcCam.getProjectionMode()); cam.setStereoEyeMode(srcCam.getStereoEyeMode(), false); cam.setStereoEyeSeparation(srcCam.getStereoEyeSeparation(), false); cam.setStereoAxisMode(srcCam.getStereoAxisMode(), false); cam.enableOffset(srcCam.isOffsetEnabled()); cam.setOffset(srcCam.getOffset()); dstCast->setMinValue(srcCast->getMinValue()); dstCast->setMaxValue(srcCast->getMaxValue()); dstCast->setAdaptOnChange(srcCast->getAdaptOnChange()); dstCast->setTrackballCenterBehaviour(srcCast->getTrackballCenterBehaviour()); dstCast->getTrackball().setCenter(srcCast->getTrackball().getCenter()); dstCast->setSceneBounds(srcCast->getSceneBounds()); // order is important: only now set cam and cause further link execution dstCast->set(cam); }
void LinkEvaluatorCameraFrustumId::eval(Property* src, Property* dst) throw (VoreenException) { CameraProperty* srcProp = dynamic_cast<CameraProperty*>(src); CameraProperty* dstProp = dynamic_cast<CameraProperty*>(dst); tgt::Camera cam = dstProp->get(); cam.setFrustum(srcProp->get().getFrustum()); dstProp->set(cam); }
void LinkEvaluatorCameraOrientationId::eval(Property* src, Property* dst) throw (VoreenException) { CameraProperty* dstCast = static_cast<CameraProperty*>(dst); CameraProperty* srcCast = static_cast<CameraProperty*>(src); tgt::Camera cam = dstCast->get(); tgt::Camera srcCam = srcCast->get(); cam.positionCamera(cam.getFocus() - cam.getFocalLength() * srcCam.getLook(), cam.getFocus(), srcCam.getUpVector()); dstCast->set(cam); }
LightPropertyWidget::LightPropertyWidget(FloatVec4Property* prop, QWidget* parent) : QPropertyWidget(prop, parent) , property_(prop) , noUpdateFromProp_(false) { light_ = new LightWidget(this); followCam_ = new QCheckBox(tr("Follow Camera"), this); if (BoolMetaData* follow = dynamic_cast<BoolMetaData*>(property_->getMetaDataContainer().getMetaData("FollowCamera"))) followCam_->setChecked(follow->getValue()); else followCam_->setChecked(false); layout_->setDirection(QBoxLayout::TopToBottom); layout_->addWidget(light_); layout_->addWidget(followCam_); connect(light_, SIGNAL(lightWidgetChanged(tgt::vec4)), this, SLOT(changeWidgetLight(tgt::vec4))); CameraProperty* camProp = getCamera(); if(camProp) { camProp->onChange(CallMemberAction<LightPropertyWidget>(this, &LightPropertyWidget::cameraUpdate)); light_->setLightPosition(camProp->get().getViewMatrix().getRotationalPart() * property_->get()); cameraUpdate(); } addVisibilityControls(); // we have to add this widget to the property to enable automatic metadata serialization property_->addWidget(this); }
void CameraWidget::applyOrientationAndDistanceAnimated(std::vector<float> keyframe) { tgtAssert(track_, "No trackball"); CameraProperty* camera = track_->getCamera(); tgt::quat newQuat; newQuat.x = keyframe[0]; newQuat.y = keyframe[1]; newQuat.z = keyframe[2]; newQuat.w = keyframe[3]; float newDist = keyframe[4]; float t = 0.1f; tgt::quat oldQuat = camera->get().getQuat(); float oldDist = camera->get().getFocalLength(); resetCameraPosition(); tgt::quat initQuat = camera->get().getQuat(); initQuat.invert(); cameraProp_->toggleInteractionMode(true, comboOrientation_); // todo: use timer for (int i = 0; i <= 9; ++i) { tgt::quat tmp = tgt::slerpQuat(oldQuat, newQuat, std::min(t, 1.f)); float tmpDist = t*(newDist - oldDist) + oldDist; resetCameraPosition(); track_->zoomAbsolute(tmpDist); track_->rotate(initQuat); track_->rotate(tmp); cameraProp_->invalidate(); cameraProp_->notifyChange(); qApp->processEvents(); t += 0.1f; } cameraProp_->toggleInteractionMode(false, comboOrientation_); resetCameraPosition(); track_->zoomAbsolute(newDist); track_->rotate(initQuat); track_->rotate(newQuat); cameraProp_->notifyChange(); }
void LinkEvaluatorCameraId::eval(Property* src, Property* dst) throw (VoreenException) { CameraProperty* dstCast = static_cast<CameraProperty*>(dst); CameraProperty* srcCast = static_cast<CameraProperty*>(src); tgt::Camera cam = dstCast->get(); tgt::Camera srcCam = srcCast->get(); cam.setPosition(srcCam.getPosition()); cam.setFocus(srcCam.getFocus()); cam.setUpVector(srcCam.getUpVector()); cam.setFrustum(srcCam.getFrustum()); cam.setProjectionMode(srcCam.getProjectionMode()); cam.setStereoEyeMode(srcCam.getStereoEyeMode(), false); cam.setStereoEyeSeparation(srcCam.getStereoEyeSeparation(), false); cam.setStereoAxisMode(srcCam.getStereoAxisMode()); dstCast->set(cam); dstCast->getTrackball()->setMoveCenter(srcCast->getTrackball()->getMoveCenter()); dstCast->getTrackball()->setCenter(srcCast->getTrackball()->getCenter()); dstCast->setMaxValue(srcCast->getMaxValue()); }
//----------------------------------------------------------------------------- // void LinkEvaluatorCameraPosId::eval(Property* src, Property* dst) throw (VoreenException) { bool camToProp = true; CameraProperty* camProp = dynamic_cast<CameraProperty*>(src); FloatVec3Property* vecProp = dynamic_cast<FloatVec3Property*>(dst); if(!camProp) { camToProp = false; camProp = dynamic_cast<CameraProperty*>(dst); vecProp = dynamic_cast<FloatVec3Property*>(src); } tgt::Camera cam = camProp->get(); if(camToProp) vecProp->set(cam.getPosition()); else { cam.setPosition(vecProp->get()); camProp->set(cam); } }
void LinkEvaluatorCameraLookId::eval(Property* src, Property* dst) throw (VoreenException) { bool camToProp = true; CameraProperty* camProp = dynamic_cast<CameraProperty*>(src); FloatVec3Property* vecProp = dynamic_cast<FloatVec3Property*>(dst); if(!camProp) { camToProp = false; camProp = dynamic_cast<CameraProperty*>(dst); vecProp = dynamic_cast<FloatVec3Property*>(src); } tgt::Camera cam = camProp->get(); if(camToProp) vecProp->set(cam.getLook()); else { if(length(vecProp->get()) == 0.f) { LERRORC("voreen.LinkEvaluatorCameraLookId", "Can not use 0 vector to set look vector of camera"); return; } cam.setFocus(cam.getPosition() + cam.getFocalLength() * normalize(vecProp->get())); camProp->set(cam); } }