7 #include "PlusConfigure.h" 11 #include "vtkObjectFactory.h" 17 #include <vtkVariant.h> 18 #include <vtkSmartPointer.h> 26 static const std::string SET_CAMERA_PARAMETER_CMD =
"SetCameraControlParameters";
47 SetName(SET_CAMERA_PARAMETER_CMD);
60 cmdNames.push_back(SET_CAMERA_PARAMETER_CMD);
67 if (commandName.empty() || igsioCommon::IsEqualInsensitive(commandName, SET_CAMERA_PARAMETER_CMD))
69 desc += SET_CAMERA_PARAMETER_CMD;
70 desc +=
": Set camera image parameter. Attributes: CameraDeviceId: ID of the camera device.";
84 this->SetCameraDeviceId(aConfig->GetAttribute(
"CameraDeviceId"));
87 for (
int elemIndex = 0; elemIndex < aConfig->GetNumberOfNestedElements(); ++elemIndex)
89 vtkXMLDataElement* currentElem = aConfig->GetNestedElement(elemIndex);
90 if (igsioCommon::IsEqualInsensitive(currentElem->GetName(),
"Parameter"))
92 const char* parameterName = currentElem->GetAttribute(
"Name");
93 const char* parameterValue = currentElem->GetAttribute(
"Value");
94 if (!parameterName || !parameterValue)
96 LOG_ERROR(
"Unable to find required Name or Value attribute in " << (currentElem->GetName() ? currentElem->GetName() :
"(undefined)") <<
" element in SetUsParameter command");
118 std::map<std::string, std::string>::iterator paramIt;
121 vtkSmartPointer<vtkXMLDataElement> paramElem = vtkSmartPointer<vtkXMLDataElement>::New();
122 paramElem->SetName(
"Parameter");
123 paramElem->SetAttribute(
"Name", paramIt->first.c_str());
124 paramElem->SetAttribute(
"Value", paramIt->second.c_str());
125 aConfig->AddNestedElement(paramElem);
134 LOG_DEBUG(
"vtkPlusSetCameraControlParameterCommand::Execute: " << (!this->
Name.empty() ? this->
Name :
"(undefined)")
137 if (this->
Name.empty())
142 else if (!igsioCommon::IsEqualInsensitive(this->
Name, SET_CAMERA_PARAMETER_CMD))
149 if (cameraDevice == NULL)
156 std::string cameraDeviceId = (cameraDevice->
GetDeviceId().empty() ?
"(unknown)" : cameraDevice->
GetDeviceId());
157 std::string resultString =
"<CommandReply>";
158 std::string error =
"";
159 std::map < std::string, std::pair<IANA_ENCODING_TYPE, std::string> > metaData;
164 std::map<std::string, std::string>::iterator paramIt;
167 std::string parameterName = paramIt->first;
168 std::string
value = paramIt->second;
169 resultString +=
"<Parameter Name=\"" + parameterName +
"\"";
175 bool parameterValue = STRCASECMP(
value.c_str(),
"true") == 0;
176 cameraControlParameters->
SetValue<std::string>(parameterName, parameterValue ?
"true" :
"false");
186 double parameterValue = vtkVariant(
value).ToDouble(&valid);
189 error +=
"Failed to parse " + parameterName +
". ";
190 resultString +=
" Success=\"false\"/>";
191 metaData[parameterName] = std::make_pair(IANA_TYPE_US_ASCII,
"FAIL");
195 cameraControlParameters->
SetValue<
double>(parameterName, parameterValue);
202 int parameterValue = vtkVariant(
value).ToInt(&valid);
205 error +=
"Failed to parse " + parameterName +
". ";
206 resultString +=
" Success=\"false\"/>";
207 metaData[parameterName] = std::make_pair(IANA_TYPE_US_ASCII,
"FAIL");
211 cameraControlParameters->
SetValue<
int>(parameterName, parameterValue);
215 error +=
"Invalid parameter " + parameterName +
". ";
216 resultString +=
" Success=\"false\"/>";
217 metaData[parameterName] = std::make_pair(IANA_TYPE_US_ASCII,
"FAIL");
224 error +=
"Failed to set " + parameterName +
". ";
225 resultString +=
" Success=\"false\"/>";
226 metaData[parameterName] = std::make_pair(IANA_TYPE_US_ASCII,
"FAIL");
231 resultString +=
" Success=\"true\"/>";
232 metaData[parameterName] = std::make_pair(IANA_TYPE_US_ASCII,
"SUCCESS");
234 resultString +=
"</CommandReply>";
238 LOG_WARNING(
"Failed to set US parameter, result string was: " << resultString);
241 vtkSmartPointer<vtkPlusCommandRTSCommandResponse> commandResponse = vtkSmartPointer<vtkPlusCommandRTSCommandResponse>::New();
242 commandResponse->UseDefaultFormatOff();
243 commandResponse->SetClientId(this->
ClientId);
244 commandResponse->SetOriginalId(this->
Id);
245 commandResponse->SetDeviceName(this->
DeviceName);
246 commandResponse->SetCommandName(this->GetName());
247 commandResponse->SetStatus(status);
249 commandResponse->SetErrorString(error);
250 commandResponse->SetResultString(resultString);
251 commandResponse->SetParameters(metaData);
261 if (dataCollector == NULL)
263 LOG_ERROR(
"Data collector is invalid");
273 LOG_ERROR(
"No camera device has been found by the name " << this->
CameraDeviceId);
277 cameraDevice = dynamic_cast<vtkPlusMmfVideoSource*>(device);
278 if (cameraDevice == NULL)
281 LOG_ERROR(
"The specified device " << this->
CameraDeviceId <<
" is not a camera device");
290 cameraDevice = dynamic_cast<vtkPlusMmfVideoSource*>(*it);
291 if (cameraDevice != NULL)
297 if (cameraDevice == NULL)
299 LOG_ERROR(
"No camera has been found");
static vtkPlusMmfVideoSource * SafeDownCast(vtkObject *o)
virtual std::string GetDescription(const std::string &commandName)
virtual void PrintSelf(ostream &os, vtkIndent indent)
Abstract interface for tracker and video devices.
std::vector< vtkPlusDevice * >::const_iterator DeviceCollectionConstIterator
virtual PlusStatus WriteConfiguration(vtkXMLDataElement *aConfig)
virtual PlusStatus SetNewCameraControlParameters(const vtkPlusCameraControlParameters &newCameraControlParameters)
PlusStatus GetDevice(vtkPlusDevice *&aDevice, const std::string &aDeviceId) const
This class is used to store a configuration of the imaging parameters of an Microsoft Media Foundatio...
virtual PlusStatus ReadConfiguration(vtkXMLDataElement *aConfig)
virtual std::string GetDeviceId() const
std::map< std::string, std::string > RequestedParameterChanges
virtual PlusStatus ReadConfiguration(vtkXMLDataElement *aConfig)
static const char * KEY_AUTO_EXPOSURE
static const char * KEY_ZOOM_MM
DeviceCollectionConstIterator GetDeviceConstIteratorBegin() const
static const char * KEY_EXPOSURE_LOG2SECONDS
static const char * KEY_IRIS_FSTOP
DeviceCollectionConstIterator GetDeviceConstIteratorEnd() const
Manages devices that record image or positional data.
bool RespondWithCommandMessage
static const char * KEY_ROLL_DEGREES
PlusStatus SetValue(const std::string ¶mName, T aValue)
virtual PlusStatus WriteConfiguration(vtkXMLDataElement *aConfig)
virtual PlusStatus Execute()
static const char * KEY_AUTO_FOCUS
std::string CameraDeviceId
static const char * KEY_PAN_DEGREES
void QueueCommandResponse(PlusStatus status, const std::string &message, const std::string &error="", const igtl::MessageBase::MetaDataMap *metaData=nullptr)
virtual vtkPlusDataCollector * GetDataCollector()
const char const char * value
virtual ~vtkPlusSetCameraControlParameterCommand()
static const char * KEY_TILT_DEGREES
vtkPlusSetCameraControlParameterCommand()
vtkPlusDevice * GetCameraDevice()
This command requests camera control parameter change in the client.
void SetNameToSetCameraControlParameter()
virtual vtkPlusCameraControlParameters * GetCameraControlParameters()
static const char * KEY_FOCUS_MM
vtkStandardNewMacro(vtkPlusSetCameraControlParameterCommand)
PlusCommandResponseList CommandResponseQueue
virtual void PrintSelf(ostream &os, vtkIndent indent)
Microsoft media foundation video digitizer.
virtual void GetCommandNames(std::list< std::string > &cmdNames)