[IGSTK-Developers] CylinderSpatialObjectRepresentation
Julien Jomier
jjomier at cs.unc.edu
Wed Dec 21 14:32:07 EST 2005
Luis,
I would not say that. What we are enforcing here is consistency between
tools/objects in IGSTK.
I've used a CylinderSpatialObject as a tracked needle as it was before
without any issues.
Would it be nice if IGSTK users can only change one line of code to
track an UltrasoundProbe instead of a needle? This will only be the case
if the orientation of the objects are the same.
my two cents,
Julien
Luis Ibanez wrote:
>
>
> It is a matter of concern that the CylinderSpatialObjectRepresentation
> is being customized for satisfying a very specific use, namely:
>
>
> "To make it look like a pointer in a scene"
>
>
> This is a missuse of a generic geometrical class, and a poor approach
> for a toolkit based on Object Oriented Programming.
>
>
>
> If we need a "ScenePointer" object, we should introduce a specific class
> such as:
>
> "ScenePointerSpatialObject"
>
>
> then customize it with properties (e.g. Transforms) such as having
> the axis to be parallel to Z, and the end to be in the point (0,0,0).
>
>
>
> IGSTK Classes should map straight to well defined concepts.
>
>
>
> We already discussed this issue with regard to the NeedleSpatialObject,
> and it seems that now we are proceeding backwards.
>
>
>
> Luis
>
>
>
> -------------------
> Julien Jomier wrote:
>
>> Patrick,
>>
>> > I guess David meant the Pointer is pointing towards the -Z direction.
>> > But anyway, only when I remove the '-' sign, that the cylinderObject
>> > will be on the right side.
>>
>> No the pointer is pointing towards the Z direction. This shouldn't
>> matter, you should be able to set the CalibrationTransform to satisfy
>> your needs. To me your registration should only try to optimize the
>> PatientTransform and you should set the CalibrationTransform so that
>> it's inline with your tracker.
>>
>> 1. The CylinderSpatialObject is mainly a data container when we talk
>> about tracking because the Tracker will modify its transform directly.
>> It is not true that it is only when we visualize that the orientation
>> is correct. The orientation is correct when we track the object
>> because the tracker will place the object in the real-world
>> coordinates correctly.
>>
>> 2. To me the real principal axis is Z for now and then. The tracker
>> (i.e the CalibrationTransform and the PatientTransform) should take
>> care placing the object in the correct position/orientation.
>>
>> 3. I don't think we have to.
>>
>> Hope that makes sense,
>>
>> Julien
>>
>>
>> Patrick Cheng wrote:
>>
>>> I guess David meant the Pointer is pointing towards the -Z direction.
>>> But anyway, only when I remove the '-' sign, that the cylinderObject
>>> will be on the right side.
>>>
>>> The PrincipalAxisCalibration is taking the known principal axis of
>>> the Spatial Object(cylinder) and Tracker Tool(pointer) in their own
>>> coordinate system. eg. By default, the cylinder is along it's Y axis,
>>> and pointer is along its Z axis. The PrincipalAxisCalibration then
>>> take the two principal axis, and figure out what rotation we need to
>>> take to align the cylinder with the pointer (in another word,
>>> transform the cylinder's coordinate system to the pointer's
>>> coordinate system).
>>>
>>> Julien, I have questions about your approach (add an transform to actor)
>>>
>>> 1. The final CylinderSpatialObject is actually not carrying the
>>> correct transform. Only when we visualize it, we add another
>>> transform to make the actor look right. I believe we should have the
>>> CylinderSpatialObject transform right instead of altering the actor's
>>> transform. suppose we need to do path planing or collision detection,
>>> we are working with the SpatialObject's transform, not the actor's
>>> transform.
>>>
>>> 2. This will conflict with the PrincipalAxisCalibration, as people
>>> get confused what is the real principal axis is. Here the principal
>>> axis for the cylinder is still Y, and Pointer is Z. But since we are
>>> going to have a rotation when we visualize it, we don't need the
>>> PrincipalAxisCalibration here.
>>>
>>> 3. maybe we can move the rotation and shift of origin in the
>>> CylinderSpatialObject class.
>>>
>>> Patrick
>>>
>>> Julien Jomier wrote:
>>>
>>>> Hi Patrick,
>>>>
>>>> David told me that the cylinder should be located in the [-Z,0],
>>>> therefore the cylinder should be translated by
>>>> -m_CylinderSpatialObject->GetHeight()/2.0
>>>>
>>>> > One quick question: If we can just change the transform when we
>>>> create
>>>> > the actor, what do we need the PrincipalAxisCalibration for?
>>>>
>>>> I don't know what the PrincipalAxisCalibration class is actually
>>>> doing, but the user cannot change the actor, so we need a way to
>>>> calibrate the tool anyway.
>>>>
>>>> Julien
>>>>
>>>> Patrick Cheng wrote:
>>>>
>>>>> Hi Julien,
>>>>>
>>>>> I checked out your recent change in the
>>>>> CylinderSpatialObjectRepresentation class. Now without setting the
>>>>> rotation part of the CalibrationTransform, the orientation of the
>>>>> CylinderObject will be correct, but with one little bug, in line
>>>>> 152 (igstkCylinderObjectRepresentation.cxx)
>>>>> cylinderActor->SetPosition(0,0,-m_CylinderSpatialObject->GetHeight()/2.0);
>>>>>
>>>>> There should be no '-' sign. I tested it in the application.
>>>>>
>>>>> One quick question: If we can just change the transform when we
>>>>> create the actor, what do we need the PrincipalAxisCalibration for?
>>>>>
>>>>> Patrick
>>>>>
>>>>
>>>>
>>>
>>>
>> _______________________________________________
>> IGSTK-Developers mailing list
>> IGSTK-Developers at public.kitware.com
>> http://public.kitware.com/cgi-bin/mailman/listinfo/igstk-developers
>>
>>
>
>
>
More information about the IGSTK-Developers
mailing list