Hi,

I tested PlanePositionManagerService and the results are still wrong. The rotation is kept but the offset and bounds are also kept, which lock the 2D views on the first loaded object. This seems normal because the width and height are saved in the object.

While testing, I found that method: mitk::SliceNavigationController::ReorientSlices, taking the plane's normal or 2 vectors. If I save the normal before updating the plane, update the plane and call ReorientSlices(normal), wouldn't that work? I can't test it right now but it looks like it could pay off.

Nil

Le 2017-07-04 à 04:00, Dinkelacker, Stefan a écrit :

Hi,

Maybe the way the Position node stuff of the 3D-interpolation [1] is a good hint for that. For each drawn contour it generates a PlanarCircle as helper object. When clicking on one of these nodes, the according plane is adjusted to be able to continue the contour.

Best,
Stefan

[1] https://github.com/MITK/MITK/blob/master/Modules/Segmentation/Interactions/mitkSegTool2D.cpp#L465-L521

*From:*Nil Goyette [mailto:nil.goye...@imeka.ca]
*Sent:* Montag, 3. Juli 2017 17:41
*To:* Dinkelacker, Stefan; mitk-users@lists.sourceforge.net
*Subject:* Re: [mitk-users] Special reinit

Hi Stefan, hi all,

Anyone can help me with this? Here's a better explanation of what I need. Lets say: 1) I load a small object, place the scene as I like (zoom, rotate 3D and axes, etc.) http://i.imgur.com/MBHAqza.png 2) I load a second object: the reference image. http://i.imgur.com/Gy93a3a.png <http://i.imgur.com/Gy93a3a.png> This screenshot was taken just before the automatic reinit in RenderingManager::InitializeViews (using a breakpoint).

In the last screenshot, my goal would be to leave the planes untouched, except for the bounds. I should be able to see the image in the sagittal/coronal planes and I should to be able to see the image *if* I zoom back. I know it's not currently possible in MITK. I'm asking how to do it in the code. I tried some things but it always produce horrors like [3] in my previous message. Any ideas how I can achieve that?

Nil

Le 2017-06-21 à 09:09, Nil Goyette a écrit :

    Hi Stefan,

    Thank you for your answer. I'm working in
    InitializeViewsByBoundingObjects and InitializeViews, so I'm aware
    of this method. If I understand correctly, it returns a geometry
    with orthogonal planes (reinited, reseted?). I would gladly use
    the offset/bounds of this geometry but I also want to *keep the
    rotation* of the planes.

    In fact, that's what I tried to do in the snippet below.
    timeGeometry IS the result of
    ds->ComputeBoundingGeometry3D(ds->GetAll());.

    Nil

    Le 2017-06-21 à 03:44, Dinkelacker, Stefan a écrit :

        Hi,

        if you want to recompute the bounding box of the scene, 
mitk::DataStorage has a method for this purpose:

           mitk::TimeGeometry::Pointer geo = 
ds->ComputeBoundingGeometry3D(ds->GetAll());

        Best,

        Stefan

        ________________________________________

        Von: Nil Goyette<nil.goye...@imeka.ca> <mailto:nil.goye...@imeka.ca>

        Gesendet: Dienstag, 20. Juni 2017 17:24

        An:mitk-users@lists.sourceforge.net
        <mailto:mitk-users@lists.sourceforge.net>

        Betreff: [mitk-users] Special reinit

        Hi all,

        Lets start by saying that I know "Reinit" is not the right choice of

        word in this case! A reinit would reset the axis, as it should. Lets

        say, for the sake of the discussion, that I want a reinit that simply

        update the scene's bounding box, nothing else, like  [1] to [2] (made by

        hand, so not exact!):

        - No camera modification, so everything is still at the same place

        - Keep the axis rotated if they were

        - Resize the scene if an object was added/deleted

        I tried adding this snippet in RenderingManager::InitializeViews. In

        clear english: reuse the old geometry for the current plane, but update

        it with the new offset and bounds that we just calculated.

        auto newGeo = timeGeometry->GetGeometryForTimeStep(0);

        auto oldTimeGeo = nc->GetCreatedWorldGeometry();

        auto oldGeo = oldTimeGeo->GetGeometryForTimeStep(0);

        oldGeo->GetIndexToWorldTransform()->SetOffset(

            newGeo->GetIndexToWorldTransform()->GetOffset());

        oldGeo->SetBounds(newGeo->GetBounds());

        nc->SendCreatedWorldGeometryUpdate();

        nc->SetInputWorldTimeGeometry(oldTimeGeo);

        nc->Update();

        ...

        This doesn't work; it throws the planes in strange places [3], probably

        because I broke their affine matrix. I tried many things but my biggest

        success was to remove the call to SetInputWorldTimeGeometry [4]. I

        checked in DisplayInteractor::Rotate to see if there was a way to find

        the old rotation applied to the plane but it doesn't seem to be 
possible.

        Anyway, I'm mostly wondering how YOU, the mitk experts :), would do it.

        Thank you for your time.

        Nil

        [1]http://i.imgur.com/krzBvJV.png

        [2]http://i.imgur.com/NWDQQqg.png

        [3]http://i.imgur.com/7wwWczy.png

        [4]http://i.imgur.com/m9jwrpE.png




    
------------------------------------------------------------------------------

    Check out the vibrant tech community on one of the world's most

    engaging tech sites, Slashdot.org!http://sdm.link/slashdot




    _______________________________________________

    mitk-users mailing list

    mitk-users@lists.sourceforge.net
    <mailto:mitk-users@lists.sourceforge.net>

    https://lists.sourceforge.net/lists/listinfo/mitk-users


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
mitk-users mailing list
mitk-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to