[vtkusers] HELP ME!! Equal size of vtkRender e vtkRenderWindow?? How to make?

cyros at tiscali.it cyros at tiscali.it
Fri Dec 1 14:44:26 EST 2006


Skipped content of type multipart/alternative-------------- next part --------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using vtk;

namespace vtkWindowsApplication
{

    public partial class Form1 : Form
    {
        struct punto {
	        double x;
	        double y;
	        double z;
        }
        //vettore che conterrà i punti del profilo trovati
        punto[] punti= new punto[113];

        
        //punti funzione opacità
        int p1=200;
        int p2=750;
        int p3=801;
        int p4=1500;
        int p5=1601;

        //valori di opacità
        double o1 = 0.0;
        double o2 = 0.0;
        double o3 = 0.1;
        double o4 = 0.1;
        double o5 = 1.0;

        vtkRenderer aRenderer = new vtk.vtkRenderer();
        vtkRenderWindowInteractor iren = new vtk.vtkRenderWindowInteractor();
        vtkVolume16Reader v16 = new vtk.vtkVolume16Reader();
        vtkImageData di = new vtkImageData();
        vtkTransform tr = new vtkTransform();
        vtkImageGaussianSmooth gs = new vtkImageGaussianSmooth();
        vtkImageMagnify magnify = new vtkImageMagnify();
        vtkPiecewiseFunction opacityTransferFunction = new vtkPiecewiseFunction();
        vtkColorTransferFunction colorTransferFunction = new vtkColorTransferFunction();
        vtkVolumeProperty volumeProperty = new vtkVolumeProperty();
        vtkVolumeRayCastCompositeFunction compositeFunction = new vtkVolumeRayCastCompositeFunction();
        vtkVolumeRayCastMapper myMapper = new vtkVolumeRayCastMapper();
        vtkVolume volume = new vtkVolume();
        vtkDataArray da;
        vtkCamera camera = new vtkCamera();
        vtkInteractorStyleUser stileIren = new vtkInteractorStyleUser();
        //vtkInteractorStyleTrackballCamera stileIren = new vtkInteractorStyleTrackballCamera();
        
        
        

        
        public Form1()
        {
            InitializeComponent();
            this.Medical(this.vtkFormsWindowControl1.GetRenderWindow());
        }

        void Medical(vtk.vtkRenderWindow renWin) {

            //**********************************************************************************            
            //vtkIdType conta = 0;
            //vtkIdType contaprova = 0;
            //vtkIdType contatore = 0;
            //************************************************************************************

            // Create the renderer, the render window, and the interactor. The
            // renderer draws into the render window, the interactor enables mouse-
            // and keyboard-based interaction with the scene.
            renWin.AddRenderer(aRenderer);
           
            iren.SetRenderWindow(renWin);
            
                        
            
            // The following reader is used to read a series of 2D slices (images);
            // that compose the volume. The slice dimensions are set, and the
            // pixel spacing. The data Endianness must also be specified. The reader
            // usese the FilePrefix in combination with the slice number to construct
            // filenames using the format FilePrefix.%d. (In this case the FilePrefix
            // is the root name of the file: quarter.);
            v16.SetDataDimensions(256, 256);
            v16.SetDataByteOrderToBigEndian();
            v16.SetFilePrefix("C:/Documents and Settings/Andrea/Desktop/vtkWindowsApplication/CThead/CThead");
            v16.SetImageRange(1, 113);
            v16.SetDataSpacing(1, 1,2);
            
            /*
            string VTK_DATA_ROOT = vtk.vtkDotNetUtil.vtkGetDataRoot();
            v16.SetDataDimensions(64, 64);
            v16.SetDataByteOrderToLittleEndian();
            v16.SetFilePrefix(VTK_DATA_ROOT + "/Data/headsq/quarter");
            v16.SetImageRange(1, 93);
            v16.SetDataSpacing(3.2, 3.2, 1.5);
            */
            

            

            //uso vtkImageData
            di = v16.GetOutput();	

	        tr.RotateY(180);
	        tr.RotateX(90);
            
	
	        
            //****************************************************************************************capire a che serve
	        //vtkImageGaussianSmooth implements a convolution of the input image with a gaussian
	        // smooth the image
	        gs.SetInput(v16.GetOutput());
	        gs.SetDimensionality (2);
	        gs.SetRadiusFactors (1 ,1, 0);
            //******************************************************************************************       
            //******************************************************************************************provare senza
            // Modifica il valore scalare
	        magnify.SetInput (gs.GetOutput ());
	        magnify.SetMagnificationFactors (3,3,3);
            
            //**********************************************************************
            	
	        di.Update();

            //vtkDataArray
            da = di.GetPointData ().GetScalars ();
	        
            //*************************************************************************************************************************
            //vtkIdType nt = da -> GetNumberOfTuples ();
	        //*************************************************************************************************************************
            
            
            //cout << "Numero di componenti " << da -> GetNumberOfComponents () << "\n";
	        //cout << "Dimensione " << da -> GetSize () << "\n";
	        //cout << "Numero di tuple " << nt << "\n";
	
	//*********************************************************************************************************************************
            
	
            //vtkIdType count= da -> GetNumberOfTuples ();
     

             

            /*
            //per trovare l'id di un punto	sostituisco il valore delle coordinate
            double j[3];
            j[0]=... ;
            j[1]=....;
            j[2]=....;
            conta=di->FindPoint(j);
            cout<<da->GetTuple1(conta);
	
            //estraggo le coordinate del profilo laterale del volto per tutto l'image range
            double j[3];
            int m=1;
            while(count>0) {
                if(da ->GetTuple1 (count)>1500)	{
                    //per colorare di rosso il profilo 
			
                    da->SetTuple1(count,20000);
		
			
                    di->GetPoint(count,j);
                    punti[m].x=j[0];
                    punti[m].y=j[1];
                    punti[m].z=j[2];
                    count=256*256*(113-m);
                    m++;
                }
                else
                    count--;
            }
	
	
	
	
	
	
	
	
	
	
            double ppb[3];
	
            cout<<"il punto piu basso del mento ha coordinate:\n\n";

            //esaminiamo tutto il profilo e prendiamo il punto del profilo la cui y sia molto più grande 
            //	della y del punto precedente(ho posto una differenza di 40 unità):
            //	questo sarà il punto piu basso del mento
            //intervallo dell'image range dove  cade tutto il volto
	
	
            // ****************   FM    
            //Attenzione Uso di costanti errato   
            // ************************* FINE FM
	
	
	
            for (int n=2;n<100;n++)	{
                if ((punti[n+1].y   -   punti[n].y)>40) {
                    cout<<"x="<<punti[n+1].x<<"   y="<<punti[n+1].y<<"   z="<<punti[n+1].z<<endl;	
                    ppb[0]=punti[n+1].x;
                    ppb[1]=punti[n+1].y;
                    ppb[2]=punti[n+1].z;
                }
            }
            double x_mento=ppb[0];
            double y_mento=ppb[1];
            double z_mento=ppb[2];


	
	
	
	
	
            double pm[3];
            // a partire dal punto più basso trovato (ppb) coloro i punti circostanti 
            cout<<"i punti del mento sono:\n\n";

            for (double xed=256;xed>0;xed--)
              for (double zed=z_mento+4;zed>z_mento;zed--)//ho ordinato gli assi nella maniera corretta
                 for (double yet=y_mento;yet>y_mento-20;yet--) {
                            pm [0]=xed;
                            pm [1]=yet;
                            pm [2]=zed;
                            conta=di->FindPoint(pm);
                            if(da ->GetTuple1 (conta)>1500) {
                                    da->SetTuple1(conta,20000);
                                    cout<<"x="<<pm [0]<<"   y="<<pm [1]<<"   z="<<pm [2]<<endl;
                            }

                        }
		
		 
            di -> Update ();  //ridisegna colorando di rosso


            //estraiamo l'incisivo superiore
            double massimo=punti[2].y;
            double inc_sup[3];
            for (int k=2;k<100;k++) {
                 if (punti[k].y>massimo) {
                        massimo=punti[k].y;
                        inc_sup[0]=punti[k].x;
                        inc_sup[1]=massimo;
                        inc_sup[2]=punti[k].z;
                    }

            }
            cout<<"\n\nl'incisivo superiore ha le seguenti coordinate\n\n";
            cout<<"x="<<inc_sup [0]<<"   y="<<inc_sup [1]<<"   z="<<inc_sup[2]<<endl;
		
		
		
            contaprova=di->FindPoint(inc_sup);
            da->SetTuple1(contaprova,20000);
		
	
		
            di -> Update ();
            di -> GetPointData () -> SetScalars (da);
            di -> Update ();

        */
            //***********************************************************************************************************************************************


            tr.RotateZ(180);
            
                     
	di.Update ();








    



    // Bianco tutti 1
	// 0 completamente trasparente, 1 completamente opaco
    // Vedo ossa e pelle trasparente
    opacityTransferFunction.AddPoint(0, 0.0);
    opacityTransferFunction.AddPoint(200, 0.0);
    opacityTransferFunction.AddPoint(750, 0.0);
    opacityTransferFunction.AddPoint(801, 0.1);
    opacityTransferFunction.AddPoint(1500, 0.1);
    opacityTransferFunction.AddPoint(1601, 1.0);
    opacityTransferFunction.AddPoint(65536, 1.0);

    // Create transfer mapping scalar value to color 
    // Pelle rosa trasparente 
    colorTransferFunction.AddRGBPoint      (0.0,     0.7, 0.0, 0.0);
    colorTransferFunction.AddRGBPoint      (1500.0,  1.0, 1.0, 1.0);
    colorTransferFunction.AddRGBPoint      (10000.0, 1.0, 1.0, 1.0);
    //per la segnatura dei punti cercati
    colorTransferFunction.AddRGBPoint      (10001.0, 0.0, 1.0, 0.0);
    colorTransferFunction.AddRGBPoint      (65536.0, 0.0, 1.0, 0.0);
	
    // The property describes how the data will look
    volumeProperty.SetColor (colorTransferFunction);
    volumeProperty.SetScalarOpacity (opacityTransferFunction);
    volumeProperty.ShadeOn ();
    volumeProperty.SetInterpolationTypeToLinear ();
            
    

	// Ray cast volume rendering
	myMapper.SetInput(di);    
	myMapper.SetVolumeRayCastFunction (compositeFunction);
    
 
    
	volume.SetMapper (myMapper);
	volume.SetProperty (volumeProperty);	
	volume.SetUserMatrix (tr.GetMatrix());
            
            
    aRenderer.AddVolume (volume);
    aRenderer.SetBackground(0,0,0);
    
    
    
    stileIren.SetCurrentRenderer(aRenderer);
    //stileIren.EndRotate();
    iren.SetInteractorStyle(stileIren);
            
            
    camera.SetFocalPoint(0, 0, 0);
    aRenderer.SetActiveCamera(camera);
    aRenderer.ResetCamera();
    //camera.Zoom(1.4);



    
    

    

            








  
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            opacityTransferFunction.RemovePoint(p1);
            p1 = trackBar1.Value;
            label1.Text = trackBar1.Value.ToString();
            opacityTransferFunction.AddPoint(p1,o1);
            vtkFormsWindowControl1.Refresh();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            //vedo solo ossa
            o1 = 0.0;
            opacityTransferFunction.AddPoint(trackBar1.Value, o1);
            trackBar7.Value=(int)o1*10;
            label6.Text = o1.ToString();

            o2 = 0.0;
            opacityTransferFunction.AddPoint(trackBar2.Value, o2);
            trackBar8.Value=(int)o2*10;
            label7.Text = o2.ToString();


            o3 = 0.0;
            opacityTransferFunction.AddPoint(trackBar3.Value, o3);
            trackBar9.Value=(int)o3*10;
            label8.Text = o3.ToString();

            o4 = 0.0;
            opacityTransferFunction.AddPoint(trackBar4.Value, o4);
            trackBar10.Value = (int)o4 * 10;
            label9.Text = o4.ToString();

            o5 = 1.0;
            opacityTransferFunction.RemovePoint(trackBar5.Value);
            trackBar5.Value=1601;
            label5.Text = trackBar5.Value.ToString();
            p5 = 1601;
            opacityTransferFunction.AddPoint(trackBar5.Value, o5);
            trackBar6.Value = (int)o5 * 10;
            label10.Text = o5.ToString();
                        
            vtkFormsWindowControl1.Refresh();         
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //solo pelle	
            o1 = 0.0;
            opacityTransferFunction.RemovePoint(trackBar1.Value);
            trackBar1.Value = 300;
            label1.Text = trackBar1.Value.ToString();
            p1 = 300;
            opacityTransferFunction.AddPoint(300, o1);
            trackBar7.Value = (int)o1 * 10;
            label6.Text = o1.ToString();

            o2 = 0.1;
            opacityTransferFunction.RemovePoint(trackBar2.Value);
            trackBar2.Value = 401;
            label2.Text = trackBar2.Value.ToString();
            p2 = 401;
            opacityTransferFunction.AddPoint(trackBar2.Value, o2);
            trackBar8.Value = (int)o2 * 10;
            label7.Text = o2.ToString();


            o3 = 0.1;
            opacityTransferFunction.RemovePoint(trackBar3.Value);
            trackBar3.Value = 1000;
            label3.Text = trackBar3.Value.ToString(); ;
            p3 = 1000;
            opacityTransferFunction.AddPoint(trackBar3.Value, o3);
            trackBar9.Value = (int)o3 * 10;
            label8.Text = o3.ToString();

            o4 = 0.0;
            opacityTransferFunction.RemovePoint(trackBar4.Value);
            trackBar4.Value = 1201;
            label4.Text = trackBar4.Value.ToString();
            p4 = 1201;
            opacityTransferFunction.AddPoint(trackBar4.Value, o4);
            trackBar10.Value = (int)o4 * 10;
            label9.Text = o4.ToString();

            o5 = 0.0;
            opacityTransferFunction.AddPoint(trackBar5.Value, o5);
            trackBar6.Value = (int)o5 * 10;
            label10.Text = o5.ToString();
            
            vtkFormsWindowControl1.Refresh();
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void trackBar4_Scroll(object sender, EventArgs e)
        {
            label4.Text = trackBar4.Value.ToString();
            opacityTransferFunction.RemovePoint(p4);
            p4 = trackBar4.Value;
            opacityTransferFunction.AddPoint(p4, o4);
            vtkFormsWindowControl1.Refresh();
        }

        private void trackBar7_Scroll(object sender, EventArgs e)
        {
            
            o1 = ((double)trackBar7.Value) / 10;
            opacityTransferFunction.AddPoint(p1, o1);
            vtkFormsWindowControl1.Refresh();
            label6.Text = o1.ToString();



        }

        private void trackBar8_Scroll(object sender, EventArgs e)
        {
            o2 = ((double)trackBar8.Value) / 10;
            opacityTransferFunction.AddPoint(p2, o2);
            vtkFormsWindowControl1.Refresh();
            label7.Text = o2.ToString();

        }

        private void trackBar9_Scroll(object sender, EventArgs e)
        {
            
            o3 = ((double)trackBar9.Value) / 10;
            opacityTransferFunction.AddPoint(p3, o3);
            vtkFormsWindowControl1.Refresh();
            label8.Text = o3.ToString();
        }

        private void trackBar10_Scroll(object sender, EventArgs e)
        {
            o4 = ((double)trackBar10.Value) / 10;
            opacityTransferFunction.AddPoint(p4, o4);
            vtkFormsWindowControl1.Refresh();
            label9.Text = o4.ToString();
        }

        private void trackBar6_Scroll(object sender, EventArgs e)
        {
            o5 = ((double)trackBar6.Value) / 10;
            opacityTransferFunction.AddPoint(p5, o5);
            vtkFormsWindowControl1.Refresh();
            label10.Text = o5.ToString();
        }

        private void trackBar2_Scroll(object sender, EventArgs e)
        {
            label2.Text = trackBar2.Value.ToString();
            opacityTransferFunction.RemovePoint(p2);
            p2 = trackBar2.Value;
            opacityTransferFunction.AddPoint(p2, o2);
            vtkFormsWindowControl1.Refresh();
        }

        private void trackBar3_Scroll(object sender, EventArgs e)
        {
            label3.Text = trackBar3.Value.ToString();
            opacityTransferFunction.RemovePoint(p3);
            p3 = trackBar3.Value;
            opacityTransferFunction.AddPoint(p3, o3);
            vtkFormsWindowControl1.Refresh();
        }

        private void trackBar5_Scroll(object sender, EventArgs e)
        {
            label5.Text = trackBar5.Value.ToString();
            opacityTransferFunction.RemovePoint(p5);
            p5 = trackBar5.Value;
            opacityTransferFunction.AddPoint(p5, o5);
            vtkFormsWindowControl1.Refresh();
        }

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void label4_Click(object sender, EventArgs e)
        {

        }

        private void label13_Click(object sender, EventArgs e)
        {

        }

        private void trackBar11_Scroll(object sender, EventArgs e)
        {
            
            v16.SetImageRange(trackBar11.Value, trackBar12.Value);
            vtkFormsWindowControl1.Refresh();
        }

        private void trackBar12_Scroll(object sender, EventArgs e)
        {
            v16.SetImageRange(trackBar11.Value, trackBar12.Value);
            vtkFormsWindowControl1.Refresh();
        }

        private void button3_Click(object sender, EventArgs e)
        {
         
             //segno il profilo 
            /*
            int count= da.GetNumberOfTuples();
            int m=1;
	        while(count>0) {
		    if(da.GetTuple1(count)>1500)	{ 
			    da.SetTuple1(count,40000); 
				count=256*256*(113-m);
		    	m++;
		    }
		    else
			    count--;
	        }
            */


            //int centro = (56 * 256 * 256) +(256*128)+128;
            int centro = (100 * 256 * 256) +(256*50)+128;
            da.SetTuple1(centro,40000);
            da.SetTuple1(centro + 1, 40000);
            da.SetTuple1(centro - 1, 40000);
            da.SetTuple1(centro + 2, 40000);
            da.SetTuple1(centro - 2, 40000);
            da.SetTuple1(centro + 3, 40000);
            da.SetTuple1(centro - 3, 40000);
            da.SetTuple1(centro + 4, 40000);
            da.SetTuple1(centro - 4, 40000);
            da.SetTuple1(centro + 5, 40000);
            da.SetTuple1(centro - 5, 40000);
            da.SetTuple1(centro + 6, 40000);
            da.SetTuple1(centro - 6, 40000);
            da.SetTuple1(centro + 7, 40000);
            da.SetTuple1(centro - 7, 40000);
            da.SetTuple1(centro + 8, 40000);
            da.SetTuple1(centro - 8, 40000);
            da.SetTuple1(centro + 9, 40000);
            da.SetTuple1(centro - 9, 40000);
            da.SetTuple1(centro + 10, 40000);
            da.SetTuple1(centro - 10, 40000);
            da.SetTuple1(centro + 11, 40000);
            da.SetTuple1(centro - 11, 40000);
            da.SetTuple1(centro + 12, 40000);
            da.SetTuple1(centro - 12, 40000);
            vtkFormsWindowControl1.Refresh();
           
        }

        private void button4_Click(object sender, EventArgs e)
        {
            
        }





        //Disegno una riga rossa in profondità a partire dal punto cliccato
        private void vtkFormsWindowControl1_Click(object sender, EventArgs e)
        {
            
            

           int[] coordinate = new int[2];

            float xIprimoPiano, xFprimoPiano, xIfondo, xFfondo;
            float zIprimoPiano, zFprimoPiano, zIfondo, zFfondo;
            int xClick, zClick, Xtrovata = 0, Ytrovata = 0, Ztrovata;

            int x, y, z, count = 0, scalare, controllo = 0;

            float xProiezioneFondoClick;
            float zProiezioneFondoClick;

            coordinate = iren.GetEventPosition();
            
            label17.Text = coordinate[0].ToString();
            label18.Text = coordinate[1].ToString();
            xClick = coordinate[0];
            zClick = coordinate[1];
            
            //label21.Text = aRenderer.GetPickX().ToString();
            vtkPicker pick = new vtkPicker();
            //controllo se faccio il click dentro o fuori il render
            label21.Text=pick.Pick(xClick, zClick, 0, aRenderer).ToString();
            
            
            
            
             
   
                 
	  
		
	


            
            
            
                        
            
        }

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        private void label17_Click(object sender, EventArgs e)
        {

        }

        private void button5_Click(object sender, EventArgs e)
        {
            
            //volume.SetPosition(-100.0, 0.0, -100.0);
            label21.Text=volume.GetPosition()[0].ToString();
            label22.Text =volume.GetPosition()[1].ToString();
            label23.Text =volume.GetPosition()[2].ToString();
            volume.SetDragable(40);
            
            
            
            
            
            
            //camera.Azimuth(180);
            vtkFormsWindowControl1.Refresh();
            
            
        }

        private void label20_Click(object sender, EventArgs e)
        {

        }

        private void label18_Click(object sender, EventArgs e)
        {

        }

        private void label23_Click(object sender, EventArgs e)
        {

        }
    }
}


More information about the vtkusers mailing list