This file is indexed.

/usr/include/projects/Haptic/lib/HapticMapping.h is in libsofa1-dev 1.0~beta4-9.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
/******************************************************************************
*       SOFA, Simulation Open-Framework Architecture, version 1.0 beta 4      *
*                (c) 2006-2009 MGH, INRIA, USTL, UJF, CNRS                    *
*                                                                             *
* This program is free software; you can redistribute it and/or modify it     *
* under the terms of the GNU General Public License as published by the Free  *
* Software Foundation; either version 2 of the License, or (at your option)   *
* any later version.                                                          *
*                                                                             *
* This program is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for    *
* more details.                                                               *
*                                                                             *
* You should have received a copy of the GNU General Public License along     *
* with this program; if not, write to the Free Software Foundation, Inc., 51  *
* Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.                   *
*******************************************************************************
*                            SOFA :: Applications                             *
*                                                                             *
* Authors: M. Adam, J. Allard, B. Andre, P-J. Bensoussan, S. Cotin, C. Duriez,*
* H. Delingette, F. Falipou, F. Faure, S. Fonteneau, L. Heigeas, C. Mendoza,  *
* M. Nesme, P. Neumann, J-P. de la Plata Alcade, F. Poyer and F. Roy          *
*                                                                             *
* Contact information: contact@sofa-framework.org                             *
******************************************************************************/
#ifndef SOFA_COMPONENT_MAPPING_HAPTICMAPPING_H
#define SOFA_COMPONENT_MAPPING_HAPTICMAPPING_H


#include "ChaiDevice.h"
#include "sofa/core/componentmodel/behavior/MechanicalMapping.h"
#include "sofa/component/mapping/RigidRigidMapping.h"

using sofa::core::objectmodel::ChaiDevice;
using sofa::component::mapping::RigidRigidMapping;
using sofa::core::componentmodel::behavior::MechanicalMapping;
using sofa::core::componentmodel::behavior::MechanicalState;


namespace sofa{

	namespace component{

		namespace mapping{

/**
*	\brief specialized rigid to rigid mapping which link 
*	an haptic device and a rigid mechanical object
*
*	It's a special extension of a RigidRigidMapping, where the IN object
*	isn't used, and is dynamicaly replace by the haptic device datas
*
*	You need to specialized it with the type of your rigid mechanical object
*	that represent your device in SOFA
*
*/
template <class DeviceType>
class HapticMapping 
: 
public RigidRigidMapping< MechanicalMapping< MechanicalState<DeviceType>, MechanicalState<DeviceType> > >{


private :
	
	/// The haptic device
	ChaiDevice* chaiDevice;

	/// Catch the OpenGlInitializedEvent to activate the mapping
	/// (GL_MODELVIEW_MATRIX must be initialize to apply the mapping)
	///
	/// see apply method for more detail about this feature 
	void handleEvent(core::objectmodel::Event *);

	/// Indicate if openGl is initialized (GL_MODELVIEW_MATRIX must be initialize to apply the mapping)
	///
	/// see apply method for more detail about this feature 
	Data< bool > openGlInitialized;

public :
	typedef MechanicalState<DeviceType> Out;

	/// Constructor taking the device DOF (the Output model) as parameter
	HapticMapping(MechanicalState<DeviceType>* device);

	/// Destructor
	///
	/// Delete the device in order to stop the haptic loop
	~HapticMapping();
	
	/// Apply the mapping on position vectors. overwrited from Mapping 
	///
	/// We don't use the second parameter (the input model) wich is replace by the physical device
	/// When OpenGl is initialized, this function convert the device position in the sofa world position,
	/// in order that your device always move in the same axes, in front of the user
	void apply( typename DeviceType::VecCoord& device, const typename DeviceType::VecCoord& /* notUsed */);


	/// Apply the reverse mapping on force vectors. overwrited from Mapping
	///
	/// Does nothing yet
	void applyJT( typename DeviceType::VecDeriv& /*device*/, const typename DeviceType::VecDeriv& /*notUsed*/) {};
	
	/// Apply the mapping on derived (velocity, displacement) vectors. overwrited from Mapping
	///
	/// Does nothing yet
	void applyJ( typename DeviceType::VecDeriv& /*device*/, const typename DeviceType::VecDeriv& /*notUsed*/) {};
	
	
	// **********************************************************
	//  The two method following (canCreate & create) can't be removed 
	//  from .h file because of the template of the output
	// **********************************************************


	/// Pre-construction check method called by ObjectFactory. Overtwrited from Mapping.
	///
	/// This implementation read the object2 attributes and check
   	/// if it is compatible with the output model types of this
   	/// mapping. We jump over the test of the input model 
	template<class T>
	static bool canCreate(	T*& obj, 
				core::objectmodel::BaseContext* /* context */,
				core::objectmodel::BaseObjectDescription* arg)
	{
       		if (arg->findObject(arg->getAttribute("object2","..")) == NULL)
           		std::cerr << "Cannot create "<<className(obj)<<" as object2 is missing.\n";
        	if (dynamic_cast<Out*>(arg->findObject(arg->getAttribute("object2",".."))) == NULL)
            		return false;
        	return true;
	}


	/// Construction method called by ObjectFactory. Overtwrited from Mapping.
    	///
    	/// This implementation read the object2 attributes to
    	/// find the output models of this mapping.
	template<class T>
	static void create(	T*& obj, 
				core::objectmodel::BaseContext* context, 
				core::objectmodel::BaseObjectDescription* arg)
	{
		obj = new T((arg?dynamic_cast<Out*>(arg->findObject(arg->getAttribute("object2",".."))):NULL));
		if (context) context->addObject(obj);
		if ((arg) && (arg->getAttribute("object2")))
		{
			obj->object2.setValue( arg->getAttribute("object2") );
			arg->removeAttribute("object2");
		}
		if (arg) obj->parse(arg);
	}
	
	






}; // class HapticMapping


		} // namespace mapping

	} // namespace component

} // namespace sofa

#endif