Exemplo n.º 1
0
MsgResult TEMPLATESGallery::Message(Msg* Message)
{
	if (IS_OUR_DIALOG_MSG(Message))
	{
		DialogMsg* Msg = (DialogMsg*)Message;

		switch (Msg->DlgMsg)
		{
			case DIM_CREATE:
				SGInit::UpdateGalleryButton(OPTOKEN_DISPLAYTEMPLATEGALLERY, TRUE);
				break;

			case DIM_CANCEL:
				SGInit::UpdateGalleryButton(OPTOKEN_DISPLAYTEMPLATEGALLERY, FALSE);
				break;
		}

		return(SuperGallery::Message(Message));
	}

	// If we have no displaytree, then we have not been shown, or something terrible has
	// happened, so we don't bother handling any of these messages.
	if (DisplayTree == NULL)
		return(SuperGallery::Message(Message));


	// **** TO DO ****
	// Just another note: Most galleries ignore most messages when closed (!IsVisible())
	// This means that they must re-create themselves properly to get back up to date
	// when they are opened - this is done in the PostCreate handler. If you wish to 
	// respond to messages to keep up to date while closed, you should address the
	// default code in the PostCreate handler as well.

	if (IsVisible() && MESSAGE_IS_A(Message, DocChangingMsg))
	{
		DocChangingMsg *TheMsg = (DocChangingMsg *) Message;

		switch ( TheMsg->State )
		{
			case DocChangingMsg::DocState::BORN:			// New document - add to display tree
				{
					INT32 Extent = GetDisplayExtent();		// Remember previous list extent

					CreateNewSubtree(TheMsg->pChangingDoc);	// Add a subtree for this doc
					ShadeGallery(FALSE);					// Unshade the gallery

					InvalidateCachedFormat();				// And redraw what is necessary
					RedrawEverythingBelow(-Extent);
				}
				break;		// Pass this message on to the base class as well
		}
	}

	return(SuperGallery::Message(Message));
}    
Exemplo n.º 2
0
void WITVolumeViz::ActiveImageExtents(double transPts[4][3], double transNormal[4])
{
    // get the active image extents

    double pts[4][3];
    int displayExtent[6];
    double planeNormal[4]= {0,0,0,0};
    uint dim[4];
    // get the image dimensions
    _vol->getDimension (dim[0], dim[1], dim[2], dim[3]);
    DTIVoxel lPos = DTIVoxel(3);
    // map position from ACPC to 3d world space
    WorldToLocal(_vol->getTransformMatrix(), _vPos, dim, lPos);

    memset(pts, 0, sizeof(double)*4*3);

    int i = ActiveImage();
    GetDisplayExtent ((DTISceneActorID)i,displayExtent);
    for (int j = 0; j < 4; j++)
        pts[j][i] = lPos[i];
    planeNormal[i] = 1;

    // get the 4 corners depending on which image plane is selected
    switch (ActiveImage())
    {
    case DTI_ACTOR_SAGITTAL_TOMO:
        pts[1][1] = displayExtent[3];
        pts[2][1] = displayExtent[3];
        pts[2][2] = displayExtent[5];
        pts[3][2] = displayExtent[5];
        break;
    case DTI_ACTOR_CORONAL_TOMO:
        pts[1][0] = displayExtent[1];
        pts[2][0] = displayExtent[1];
        pts[2][2] = displayExtent[5];
        pts[3][2] = displayExtent[5];
        break;
    case DTI_ACTOR_AXIAL_TOMO:
        pts[1][0] = displayExtent[1];
        pts[2][0] = displayExtent[1];
        pts[2][1] = displayExtent[3];
        pts[3][1] = displayExtent[3];
        break;
    default:
        break;
    };
    vtkMatrix4x4 *mx = GetUserMatrix();
    // map the points from 3d world space to ACPC space
    for (int i = 0; i < 4; i++)
    {
        double fooIn[4] = {pts[i][0], pts[i][1], pts[i][2], 1};
        double fooOut[4];
        mx->MultiplyPoint (fooIn, fooOut);
        transPts[i][0] = fooOut[0];
        transPts[i][1] = fooOut[1];
        transPts[i][2] = fooOut[2];
    }
    // inverse of transpose:
    vtkMatrix4x4 *invertedMx = vtkMatrix4x4::New();
    vtkMatrix4x4 *transposedMx = vtkMatrix4x4::New();
    mx->Invert (mx, invertedMx);
    mx->Transpose (invertedMx, transposedMx);
    mx->MultiplyPoint (planeNormal, transNormal);
    transposedMx->Delete();
    invertedMx->Delete();
}