2 #include "manualViewPerpPlaneContour.h"
4 #include "vtkPlane2DView.h"
6 manualViewPerpPlaneContour::manualViewPerpPlaneContour()
9 // ----------------------------------------------------------------------------
10 manualViewPerpPlaneContour::~manualViewPerpPlaneContour()
15 // ----------------------------------------------------------------------------
16 manualViewPerpPlaneContour * manualViewPerpPlaneContour :: Clone()
18 manualViewPerpPlaneContour * clone = new manualViewPerpPlaneContour();
19 CopyAttributesTo(clone);
23 // ---------------------------------------------------------------------------
25 void manualViewPerpPlaneContour::CopyAttributesTo( manualViewPerpPlaneContour * cloneObject)
28 manualViewContour::CopyAttributesTo(cloneObject);
34 // ----------------------------------------------------------------------------
35 void manualViewPerpPlaneContour::UpdateViewPoint(int id)
38 manualPoint *mp = _manContModel->GetManualPoint(id);
42 FilterCordinateXYZ(x,y,z);
44 _lstViewPoints[id]->SetPositionXY( x , y ,GetRange(), z );
45 if ((z>=-1) && (z<=1))
47 _lstViewPoints[id]->GetVtkActor()->VisibilityOn();
49 _lstViewPoints[id]->GetVtkActor()->VisibilityOff();
52 // ----------------------------------------------------------------------------
53 void manualViewPerpPlaneContour::FilterCordinateXYZ (double &x, double &y, double &z)
55 vtkPlane2DView *vtkplane2Dview = (vtkPlane2DView*)( this->GetWxVtkBaseView() );
56 vtkMPRBaseData *vtkmprbasedata = vtkplane2Dview->GetVtkmprbasedata();
57 vtkTransform *transf1 = vtkTransform::New();
58 vtkTransform *transf2 = vtkmprbasedata->GetTransformOrientation();
59 transf1->SetMatrix( transf2->GetMatrix() );
63 double center = vtkplane2Dview->GetImgSize() / 2;
65 in[0] = x - vtkmprbasedata->GetX();
66 in[1] = y - vtkmprbasedata->GetY();
67 in[2] = z - vtkmprbasedata->GetZ();
70 transf1->MultiplyPoint(in,out);
76 this->GetWxVtkBaseView()->GetSpacing(spc);
84 // ----------------------------------------------------------------------------
85 void manualViewPerpPlaneContour::TransfromCoordViewWorld( double &X,double &Y,double &Z,int type )
88 vtkPlane2DView *vtkplane2Dview = (vtkPlane2DView*)( this->GetWxVtkBaseView() );
89 vtkplane2Dview->TransfromCoordViewWorld2(X,Y,Z);
93 // ----------------------------------------------------------------------------
94 void manualViewPerpPlaneContour::RefreshContour() // virtual
96 // manualViewContour::RefreshContour();
102 // JSTG 25-02-08 ----------------------------------------------------------
104 //--------------------------------------------------------
110 double dist,distMin = 99999999;
112 vtkPlane2DView *vtkplane2Dview = (vtkPlane2DView*)( this->GetWxVtkBaseView() );
113 double center = vtkplane2Dview->GetImgSize() / 2;
116 np = GetNumberOfPoints( );
118 //JSTG 25-02-08 ------------------------------------------
120 //nps = GetNumberOfPointsSpline();
121 nps = _manContModel->GetNumberOfPointsSpline();
122 //delta = ( double ) ( np ) / ( double ) ( nps-1 );
123 _manContModel->UpdateSpline();
124 //--------------------------------------------------------
128 for( i = 0; i < nps; i++ )
130 // JSTG 25-02-08 ----------------------------------------------------------
131 //t = delta * (double)i ;
132 //tt = delta * (double)(i+1) ;
133 //_manContModel->GetSplinePoint(t ,pp1[0],pp1[1],pp1[2]);
134 //_manContModel->GetSplinePoint(tt,pp2[0],pp2[1],pp2[2]);
135 _manContModel->GetSpline_i_Point(i ,&pp1[0],&pp1[1],&pp1[2]);
136 _manContModel->GetSpline_i_Point(i+1,&pp2[0],&pp2[1],&pp2[2]);
137 //--------------------------------------------------------------------------
138 FilterCordinateXYZ(pp1[0],pp1[1],pp1[2]);
139 FilterCordinateXYZ(pp2[0],pp2[1],pp2[2]);
140 if (pp2[2]*pp1[2]<=0)
142 if (pp1[2]-pp2[2]!=0) {
143 u = -pp2[2] / (pp1[2]-pp2[2]);
147 pp[0] = ( pp1[0]-pp2[0] )*u + pp2[0];
148 pp[1] = ( pp1[1]-pp2[1] )*u + pp2[1];
149 pp[2] = ( pp1[2]-pp2[2] )*u + pp2[2];
150 ppC[0] = pp[0] - center;
151 ppC[1] = pp[1] - center;
153 dist = sqrt( ppC[0]*ppC[0] + ppC[1]*ppC[1] + ppC[2]*ppC[2] );
165 _pts->SetPoint(0, 0 , 0 , 0);
166 _pts->SetPoint(1, 0 , 0 , 0);
170 ppB[0]=ppB[0]*_spc[0];
171 ppB[1]=ppB[1]*_spc[1];
173 _pts->SetPoint( 0, ppB[0] , ppB[1]+1 , 1 );
174 _pts->SetPoint( 1, ppB[0] , ppB[1]-1 , 1 );
175 _pts->SetPoint( 2, ppB[0] , ppB[1] , 1 );
176 _pts->SetPoint( 3, ppB[0]-1 , ppB[1] , 1 );
177 _pts->SetPoint( 4, ppB[0]+1 , ppB[1] , 1 );
180 for( i = 5; i < nps; i++ )
182 _pts->SetPoint( i, ppB[0] , ppB[1] , 1 );
187 //---------------------------------------------------------------------------
188 bool manualViewPerpPlaneContour::ifTouchContour( int x, int y, int z)
191 vtkPlane2DView *vtkplane2Dview = (vtkPlane2DView*)( this->GetWxVtkBaseView() );
195 vtkplane2Dview->TransFromCoordScreenToWorld(X,Y,Z);
198 _pts->GetPoint(0, ppA);
199 if (sqrt( (ppA[0]-X)*(ppA[0]-X) + (ppA[1]-Y)*(ppA[1]-Y) ) <=2)