Hi Stefan,

Ah, my mistake — thanks for clarifying, and I really appreciate the guidance!

Best,
Mujassim

On Tue, 8 Apr 2025 at 11:37, Dinkelacker, Stefan
<s.dinkelac...@dkfz-heidelberg.de> wrote:
>
> Hi Mujassim,
>
> I think there's been a mix-up — we're not actually working on this ourselves, 
> just offering some guidance on how you might proceed.
>
> Best,
> Stefan
> ________________________________________
> Von: Mujassim Jamal <mujassimjama...@gmail.com>
> Gesendet: Donnerstag, 3. April 2025 05:43
> An: Dinkelacker, Stefan
> Cc: mitk-users@lists.sourceforge.net
> Betreff: Re: [Extern] - [mitk-users] Contour Editing in MITK
>
> Hi Stefan,
>
> I just wanted to check if there are any updates on its implementation. No 
> rush—just curious to know how it's progressing.
>
> Best,
> Mujassim
>
>
> On Mon, 24 Mar 2025 at 13:52, Dinkelacker, Stefan 
> <s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>> 
> wrote:
>
> Hi Mujassim,
>
> yes, an approach in that direction is reasonable. I think I would write a 
> function that traverses from the hover point in both directions along the 
> contour for a certain distance D (should be easy since two points are always 
> connected by a straight line). Each contour vertex that is within D I would 
> pair with a weight like a vertex at the hover point would have weight 1, a 
> vertex in distance D/2 would have weight 0.5 and a vertex in distance D would 
> have weight 0. The returned list of pairs (probably made up of vertex index 
> and weight) I would use to decide on which points the move operation has 
> influence on and how much. The weight can also be directly used to calculate 
> a color for rendering like in my example picture.
>
> There's an edge case for tiny contours, though, when basically more or less 
> all points are within distance D. So probably I would also take the contour's 
> complete circumferrence into account to decide if D should be decreased to 
> never cover more than a certain percentage of a contour's circumferrence, or 
> simething similar. A strategy for this is greatly dependent on the contour's 
> you are expecting in the first place, like will they have dense or sparse 
> vertices, what is the typical ratio of distance between vertices and the 
> whole circumferrence etc...
>
> Best,
> Stefan
>
> ________________________________________
> Von: Mujassim Jamal 
> <mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>
> Gesendet: Freitag, 21. März 2025 12:21
> An: Dinkelacker, Stefan
> Cc: mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>
> Betreff: Re: [Extern] - [mitk-users] Contour Editing in MITK
>
> Hi Stefan,
>
> While implementing the custom mapper for neighbor highlighting, I realized 
> that I first need to identify the neighboring points before I can highlight 
> them. This means that creating and identifying neighbor points within the 
> contour itself is an essential prerequisite.
>
> It might be more effective to focus on neighbor detection first before moving 
> on to the rendering and appearance aspects. For reference, I have attached a 
> picture showing the contour I am working on, which consists of six vertices. 
> Here’s the basic approach I have in mind:
>
> 1.  A position is hovered over on the contour (marked in red at vertex 1 or 
> between vertices 5 and 4).
> 2.  If a vertex is found at that position, proceed to the next step; 
> otherwise, first add a point at that location.
> 3.  The algorithm will then attempt to find neighboring points on both sides 
> of the hovered position within a specified radius (marked in green).
> 4.  If no neighboring points are found, 'X' number of points will be added in 
> both directions of the hovered position within the radius.
> 5.  Finally, the identified points to be highlighted will be passed to the 
> rendering process.
>
> Does this approach make sense to you? I’d appreciate your thoughts on it.
>
> Best,
> Mujassim
>
>
> On Mon, 17 Mar 2025 at 19:36, Dinkelacker, Stefan 
> <s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>>>
>  wrote:
> Hi Mujassim,
>
> interactors typically just change state/properties of data. The 
> transformation into render primitives happens in mapper classes, which 
> (re-)generate the VTK (or OpenGL in legacy cases) primitives on any 
> data/property updates. Long story short: if you want to change anything 
> regarding the appearance of data, you would need to write (potentially 
> derive) your own mapper. Unfortunately mappers in the regime of PlanarFigures 
> or ContourModelSets are, let's say, part of a technical dept that were never 
> resolved, and while they are working, they shouldn't probably be used as 
> examples for new implementations. You still can do so, of course, but in 
> general new mappers should be derived from mitk::VtkMapper.
>
> Best regards,
> Stefan
> ________________________________________
> Von: Mujassim Jamal 
> <mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>>
> Gesendet: Montag, 17. März 2025 13:10
> An: Dinkelacker, Stefan
> Cc: 
> mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>>
> Betreff: Re: [Extern] - [mitk-users] Contour Editing in MITK
>
> Hi Stefan,
>
> Yes, the Lasso tool better aligns with my needs. I tested 
> ContourModelInteractor, set up the MITK-ProjectTemplate, created a custom 
> interactor class inheriting from ContourModelInteractor, and implemented a 
> function to enable interaction on the saved contour node, following your 
> instructions. I also prefer this approach from scratch rather than the 
> vtkCutter approach you mentioned in your other post.
>
> Before implementing the OnMovePoint function, I plan to first develop a 
> neighbor highlighting feature for the contour. This feature will highlight 
> the neighboring areas of a point when hovered over with the mouse. Users will 
> also be able to adjust the highlighted area, allowing modifications to only 
> that portion of the contour rather than the entire area between two points 
> (which I believe is the default behavior). Currently, ContourModelInteractor 
> highlights the entire contour when hovered over.
>
> Could you share your thoughts on this approach?
>
> Best regards,
> Mujassim
>
> On Fri, 21 Feb 2025 at 12:14, Dinkelacker, Stefan 
> <s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>>>>
>  wrote:
> Hi Mujassim,
>
> let's assume you would start with the lasso tool [1] instead of the livewire 
> tool, which uses the same base class but seems to fit your needs even better. 
> The base class EditableContourTool [2] sets up the state machine 
> "EditableContourTool.xml" for the creation of the contour and connects most 
> of the functions. The derived LassoTool class then only connects the 
> MovePoint action in addition. But all of this interaction is for the creation 
> of the contour, not for editing. In LassoTool::FinishTool() you will see, 
> however, that another DataInteractor/StateMachine is associated with the 
> created contour data node: ContourModelInteractor [3] with 
> ContourModelModificationInteractor.xml as state machine. In this class you 
> find the OnMovePoint() method which is called when moving a point of the 
> contour. That's where you want to hook in to add your functionality. You can 
> do this for example by subclassing ContourModelInteractor and overriding the 
> OnMovePoint() method.
>
> To understand/test the ContourModelInteractor in the MITK Workbench first, 
> activate the Segmentation plugin, create a segmentation, select the Lasso 
> tool from the 2D tools and remove the checkmark from "Auto-confirm contour".  
> This is crucial. Start a contour with a double click, add points with single 
> clicks and add the last point again with a double click. Now the editable 
> contour should still be on the screen and you can test the 
> ContourModelnteractor by moving an existing point of the contour for example.
>
> To start with such a contour right from the beginning I recommend to save the 
> contour so you can simply open it later without having to use the 
> segmentation plugin. The contour node from the lasso tool is invisible by 
> default, though. To make it visible, open the preferences (Ctrl+P), click on 
> Data Manager on the very top and set the checkmark for "Show helper objects". 
> While the Lasso tool is active with an editable contour, you will see a 
> "working contour node" node in the Data Manager now. You can right-click on 
> it and "Save..." it to a .cnt file, that you can later open again.
>
> When you implement your subclass you can activate the interaction by calling 
> either DataInteractor::SetDataNode() or DataNode::SetDataInteractor() on a 
> contour node. A good starting point for that is probably your own plugin/view 
> and to wire up a button to do so. Start best with the MITK-ProjectTemplate 
> [4] where you could modify the Example View for your first prototype [5].
>
> [1] https://docs.mitk.org/2024.12/classmitk_1_1LassoTool.html
> [2] https://docs.mitk.org/2024.12/classmitk_1_1EditableContourTool.html
> [3] https://docs.mitk.org/2024.12/classmitk_1_1ContourModelInteractor.html
> [4] https://github.com/MITK/MITK-ProjectTemplate/blob/master/README.md
> [5] 
> https://github.com/MITK/MITK-ProjectTemplate/blob/master/Plugins/org.mitk.gui.qt.exampleplugin/src/internal/QmitkExampleView.cpp
>
> Best,
> Stefan
> ________________________________________
> Von: Mujassim Jamal 
> <mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>>>
> Gesendet: Dienstag, 18. Februar 2025 13:41
> An: Dinkelacker, Stefan
> Cc: 
> mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>>>
> Betreff: Re: [Extern] - [mitk-users] Contour Editing in MITK
>
> Hi Stefan,
>
> I followed your instructions and explored the LiveWire tool, which helped me 
> understand how it leverages ContourModelLiveWireInteractor for various 
> interactions. I also reviewed its corresponding state machine and 
> configuration XML files, which were quite easy to follow.
>
> Next, I traced the inheritance hierarchy of ContourModelLiveWireInteractor up 
> to DataInteractor, where each class has a ConnectActionsAndFunctions function 
> responsible for linking state machine actions to interactor functions (as you 
> mentioned in an earlier response). The description of the DataInteractor 
> class also states that new interactor classes can be derived from it.
>
> From this point, what would you recommend as my next step? Should I proceed 
> with creating a new interactor and its associated XML files, or is there 
> anything else I should refer to before diving into the implementation?
>
> Looking forward to your guidance.
>
> Best,
> Mujassim
>
> On Tue, 11 Feb 2025 at 15:33, Dinkelacker, Stefan 
> <s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>>>>>
>  wrote:
> Hi Mujassim,
>
> I think at this stage an example-based exploration is probably the most 
> efficient way of going forward. For the Live Wire tool, see [1] for example 
> and move up the inheritance until you find the code using an Interactor. An 
> Interactor is connected to a state machine and a separate config for that 
> statemachine. Both are written as .xml files. The Interactor code connects 
> actions and conditions of a statemachine to its methods.
>
> Best,
> Stefan
>
> [1] https://docs.mitk.org/2024.12/classmitk_1_1LiveWireTool2D.html
> ________________________________________
> Von: Mujassim Jamal 
> <mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>>>>
> Gesendet: Dienstag, 11. Februar 2025 04:46
> An: Dinkelacker, Stefan
> Cc: 
> mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>>>>
> Betreff: Re: [Extern] - [mitk-users] Contour Editing in MITK
>
> Hi,
>
> Yes, I previously built MITK v2023.12, but I encountered several compiler 
> errors related to ITK (conversion type errors) and POCO (OpenSSL version 
> mismatch).
>
> Thank you for suggesting these four tools. I have explored all of them and 
> found that the Draw Polygon and LiveWire tools closely match my use case, 
> though I will still need to make significant customizations. I plan to refer 
> to the code of these two tools to get an initial understanding of point 
> adding, dragging, picking, etc.
>
> I would appreciate it if you could share any resources on developing a custom 
> interactor in MITK.
>
> Best,
> Mujassim
>
> On Wed, 5 Feb 2025 at 17:28, Dinkelacker, Stefan 
> <s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>>>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de><mailto:s.dinkelac...@dkfz-heidelberg.de<mailto:s.dinkelac...@dkfz-heidelberg.de>>>>>>
>  wrote:
> Hi and welcome to MITK!
>
> The last version of MITK that supported Qt 5 was MITK v2023.12, as far as I 
> know. Starting with later versions, Qt 6.6+ is a strict requirement.
>
> To get started, I recommend running the MitkWorkbench application and 
> exploring the contour interaction functionalities available in two different 
> plugins:
>
> - Measurement [1]: The Draw Polygon and Draw Subdivision Polygon tools 
> demonstrate how contours can be interacted with.
>
> - Segmentation [2]: The Lasso and LiveWire tools are both based on contour 
> interaction.
>
> MITK provides at least two approaches for working with contours and 
> interacting with them. However, you will need to write some code—for example, 
> handling a Modified event to map contour changes back to a 3D model (referred 
> to as a Surface in MITK). Additionally, MITK's current interactors only 
> operate on individual contour vertices.
>
> If you aim to implement an approach similar to what you showed in your 
> video—where multiple neighboring vertices of a contour are modified 
> simultaneously—you will need to develop a custom interactor. While this is 
> certainly possible, it is not the simplest task for a first MITK project.
>
> Best,
> Stefan
>
> [1] https://docs.mitk.org/2024.12/org_mitk_views_measurement.html
> [2] 
> https://docs.mitk.org/2024.12/org_mitk_views_segmentation.html#org_mitk_views_segmentationlivewiretool
>
> ________________________________________
> Von: Mujassim Jamal 
> <mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com><mailto:mujassimjama...@gmail.com<mailto:mujassimjama...@gmail.com>>>>>>
> Gesendet: Mittwoch, 5. Februar 2025 11:27
> An: 
> mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>>>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net><mailto:mitk-users@lists.sourceforge.net<mailto:mitk-users@lists.sourceforge.net>>>>>
> Betreff: [Extern] - [mitk-users] Contour Editing in MITK
>
> Hi,
>
> First of all, I am new to using MITK. I am working with Qt 5.15.2, but I 
> couldn't find an MITK version compatible with this Qt version. Therefore, I 
> built the latest version of MITK (v2024.12).
>
> My question is: Can I use the MITK toolkit to create a contour editing 
> feature such that, after projecting a 3D model as a contour onto the 2D 
> segmentation, I can pick and drag the points on the contour in 2D and see the 
> effect directly on the 3D model? I found that MITK provides various 
> contour-related classes, but I am unsure whether they can be used for my 
> specific use case.
>
> I am attaching a Google Drive link that contains a video showcasing what I 
> want to achieve using MITK.
> Video: 
> https://drive.google.com/file/d/1Wu3UJmQQeewlR0Thvx7TPP0iYLEmfu1J/view?usp=sharing
>
> Thank you.


_______________________________________________
mitk-users mailing list
mitk-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to