<p dir="ltr">Den 4 sep. 2016 2:25 em skrev "Elvis Stansvik" <<a href="mailto:elvis.stansvik@orexplore.com">elvis.stansvik@orexplore.com</a>>:<br>
><br>
> Hi all,<br>
><br>
> I have multiple volumes in a renderer, positioned above/below each other (like a "string" of volumes) along the Z axis, none of them are intersecting. As the user clicks+drags the mouse in the viewport, I need to capture the mouse position at the start/end positions of the drag operation and convert them to world coordinates. I think I have these parts figured out.<br>
><br>
> Then, I need to search through the list of my volumes (sorted by their end positions in world coordinates), and construct a series of vtkExtractVOI that will extract the selected segments. For volumes that are completely inside the selected area, the vtkExtractVOI will extract the full volumes, but for the start/end volume (which may be the same volume), it will only extract a portion of it.<br>
><br>
> I looked at the vtkDataSet::FindPoint, which I think will give me a linear point ID (not familiar with that from before) for a point given in world coordinates. But how can I convert that to a structured point position that I can use when setting up the extent to use for my vtkExtractVOI?<br>
><br>
> Is the static vtkStructuredData::ComputePointStructuredCoords helper the function I'm looking for? Or is there some other easier way to extract an area of a volume when the area is expressed in world coordinates? (specifically, as a start/end Z position in world coordinates).<br>
><br>
> Here's an ASCII drawing that perhaps explains better what I want to do, the rectangular areas are my volumes:<br>
><br>
> ^  +-----+<br>
> |  |     |<br>
> |  | P1  |  <--- User clicks here (world coordinate X, Y, Z)..<br>
> |  |     |<br>
> Z  +-----+<br>
>    +-----+<br>
>    |     |<br>
>    |     |<br>
>    +-----+<br>
>    +-----+<br>
>    |     |<br>
>    |     |<br>
>    |  P2 |  <--- ..and drags to here (world coordinate A, B, C).<br>
>    |     |<br>
>    |     |<br>
>    |     |<br>
>    +-----+<br>
><br>
> From this I want to create three vtkExtractVOI, that when combined gives a list of vtkImageData that represents the selected area along the Z axis (in the X and Y direction, everything from the volumes should be included).<br>
><br>
> Thanks in advance,<br>
> Elvis</p>
<p dir="ltr">I realized my mail above is a little long-winded and unclear. Sorry about that. In essence, what I'm asking is how to map an x,y,x (double) point in world coordinates to a i,j,k (int) grid position (voxel coordinate) of a given volume. I don't want the nearest point, but to return "null" or equivalent if the world point does not fall inside any voxel.</p>
<p dir="ltr">I'd also be interested how to do the same but against a plain vtkImageData instead of a vtkVolume. For this I assume I'd have to provide some info about where in the world the vtkImageData belongs (where/how I intend to map it into the scene).</p>
<p dir="ltr">Anyone know what the VTK API for this is?</p>
<p dir="ltr">Thanks in advance, <br>
Elvis</p>
<p dir="ltr">><br>
></p>