for (int k=1; k<GetCtrl(l)->GetColumnCount(); k++)
{
-
+
std::string val = (*j)->GetAttribute(mLevelList[l].key[k-1]);
if (val.size()==0) val = "?";
item.SetText( crea::std2wx(val));
void WxTreeView::ValidateSelectedImages()
{
- int level=mLevelList.size();
- std::vector<tree::Node*> sel=GetSelected(level+1);
- bool valid=true;
- std::string mess;
- if(sel.size()>0)
- {
- std::vector<tree::Node*>::iterator i;
- std::string row;
- std::string col;
- std::string plane;
-
-
- //Validation between image sizes
- for (i=sel.begin(); i!=sel.end() && valid; ++i)
- {
- if(i==sel.begin())
- {
- row=(*i)->GetAttribute(mLevelList[level-1].key[1]);
- col=(*i)->GetAttribute(mLevelList[level-1].key[2]);
- plane=(*i)->GetAttribute(mLevelList[level-1].key[3]);
- }
- else
- {
- if(((*i)->GetAttribute(mLevelList[level-1].key[1]))!=row ||
- ((*i)->GetAttribute(mLevelList[level-1].key[2]))!=col ||
- ((*i)->GetAttribute(mLevelList[level-1].key[3]))!=plane)
- {
- mess="The selected images are not compatible.";
- valid=false;
- }
- }
- }
-
- //Dimention validation
- //Compatibility with maximum
- if(valid)
- {
-
- int rows;
- int cols;
- int planes;
- std::string s;
- std::istringstream t(s);
- s=row;
- t >> rows;
- if(row==""){rows=1;}
- s=col;
- t >> cols;
- if(col==""){cols=1;}
- s=plane;
- t >> planes;
- if(plane==""){planes=1;}
-
- int dim = 0;
- if (planes>1) dim=3;
- else if (cols>1) dim=2;
- else if (rows>1) dim=1;
-
- if (dim == 0)
- {
- mess="Unknown image dimension : cannot select !";
- valid= false;
- }
- else if (dim>GetMaxDimension())
- {
- mess="Selecting ";
- mess+=dim;
- mess+="D images is not allowed !";
- valid= false;
- }
- if ( dim == GetMaxDimension() )
- {
- mess="Cannot add this image to selection : would result in a ";
- mess+=(dim+1);
- mess+="D image!";
-
- valid= false;
- }
- if ( dim < GetMinDimension() && sel.size()<2 )
- {
- mess="Cannot build the selection as it would result in a ";
- mess+=dim;
- mess+="D image, and the minimum is ";
- mess+=GetMinDimension();
- mess+="D!";
- valid= false;
- }
- }
- }
- else
- {
- mess="Cannot have 0 images selected";
- valid=false;
- }
-
//Send an event telling wether the selection is valid or not
wxCommandEvent event( 0, GetId() );
event.SetEventObject( this );
- if(valid)
- {
- mess="Selection OK !";
- event.SetInt(0);
- }
- else
- {event.SetInt(1);}
- event.SetString(crea::std2wx(mess));
+ std::vector<tree::Node*> sel=GetSelected((mLevelList.size()+1));
+ event.SetClientData(&sel);
GetEventHandler()->ProcessEvent( event );
-
-
}
-
//================================================================
- vtkImageData* WxTreeView::GetSelectedImage(int dim)
- {
-
- return NULL;
- }
-
- void WxTreeView::GetSelectedImages(std::vector<vtkImageData*>& f, int dim)
+ void WxTreeView::GetSelectedAsString(std::vector<std::string>&s)
{
- /*
- std::vector<tree::Node*> im=GetSelected(level+1);
+ int level=mLevelList.size();
+ std::vector<tree::Node*> sel=GetSelected(level+1);
+ std::vector<tree::Node*>::iterator i;
- // Create the output data
- if (im.size()==1)
- {
- // Only one image : give it
- vtkImageData* out = vtkImageData::New();
- out->ShallowCopy(mReader.GetImage(im.front()->ImageGetFullFileName()));
- f.push_back( out );
- }
- else if (im.size()>1)
+ for (i=sel.begin(); i!=sel.end(); ++i)
{
- vtkImageData* first = mReader.GetImage( im.front()->ImageGetFullFileName() );
- if (first->GetDataDimension()==2)
- {
- // n2D to 3D
- vtkImageData* out = vtkImageData::New();
- out->CopyStructure(first);
- out->SetScalarType(first->GetScalarType());
- int ext[6];
- first->GetExtent(ext);
- ext[5] = im.size();
- out->SetExtent(ext);
- // LG : TODO : Z Spacing ?
-
- out->AllocateScalars();
-
- //first->Print(std::cout);
- // out->Print(std::cout);
-
- int dim[3];
- first->GetDimensions(dim);
- unsigned long imsize =
- ( (unsigned long)first->GetScalarPointer(0,1,0)
- - (unsigned long)first->GetScalarPointer(0,0,0))
- *dim[1];
-
- int slice = 0;
- std::vector<DicomNode*>::iterator it;
- for (it=im.begin(); it!=im.end(); ++it)
- {
- //std::cout << "copying slice "<<slice <<std::endl;
- vtkImageData* cur = mReader.GetImage( (*it)->ImageGetFullFileName() );
-
- void* src = cur->GetScalarPointer(0,0,0);
- void* dst = out->GetScalarPointer(0,0,slice);
- // std::cout << "src="<<src<<std::endl;
- // std::cout << "dst="<<dst<<std::endl;
- // std::cout << "siz="<<imsize<<std::endl;
- memcpy(dst,src,imsize);
-
- slice++;
- }
- f.push_back(out);
+ std::string filename=(*i)->GetAttribute("FullFileName");
+ s.push_back(filename);
}
- else
- {
- // n3D
- std::vector<DicomNode*>::iterator it;
- for (it=im.begin(); it!=im.end(); ++it)
- {
- vtkImageData* out = vtkImageData::New();
- out->ShallowCopy(mReader.GetImage((*it)->ImageGetFullFileName()));
- f.push_back(out);
- }
- }
- }
- */
}
+ //================================================================
BEGIN_EVENT_TABLE(WxTreeView, wxPanel)
/*
EVT_SIZE(MyFrame::OnSize)