[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