00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "ExCGizmoLineBezier.h"
00025
00026 ExCGizmoLineBezier::ExCGizmoLineBezier(void)
00027 {
00028 SetName("ExCGizmoLineBezier");
00029 SetType(typeid(this).name());
00030 m_OriginePoint.SetValue(0.0f,0.0f,100.0f);
00031 m_ControlPoint1.SetValue(0.0f,100.0f,100.0f);
00032 m_ControlPoint2.SetValue(0.0f,200.0f,500.0f);
00033 m_EndPoint.SetValue(200.0f,300.0f,500.0f);
00034 m_Color.SetValue(0.5,1,0.5);
00035 }
00036
00037 ExCGizmoLineBezier::ExCGizmoLineBezier(ExCVec3D Origine,ExCVec3D Ctrl1,ExCVec3D Ctrl2,ExCVec3D End)
00038 {
00039 SetName("ExCGizmoLineBezier");
00040 SetType(typeid(this).name());
00041
00042 }
00043
00044 ExCGizmoLineBezier::~ExCGizmoLineBezier(void)
00045 {
00046 }
00047
00048 ExCVec3D ExCGizmoLineBezier::PointOnCurve(float t)
00049 {
00050 ExCVec3D vPoint;
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 float var1, var2, var3;
00077
00078
00079 var1 = 1 - t;
00080
00081
00082 var2 = var1 * var1 * var1;
00083
00084
00085 var3 = t * t * t;
00086
00087 vPoint.m_Vector[0] = var2*m_OriginePoint.GetX() + 3*t*var1*var1*m_ControlPoint1.GetX() + 3*t*t*var1*m_ControlPoint2.GetX() + var3*m_EndPoint.GetX();
00088 vPoint.m_Vector[1]= var2*m_OriginePoint.GetY() + 3*t*var1*var1*m_ControlPoint1.GetY() + 3*t*t*var1*m_ControlPoint2.GetY() + var3*m_EndPoint.GetY();
00089 vPoint.m_Vector[2]= var2*m_OriginePoint.GetZ() + 3*t*var1*var1*m_ControlPoint1.GetZ() + 3*t*t*var1*m_ControlPoint2.GetZ() + var3*m_EndPoint.GetZ();
00090
00091
00092 return vPoint;
00093 }
00094
00095 void ExCGizmoLineBezier::Draw()
00096 {
00097 if (m_Visible)
00098 {
00099 DrawLine();
00100 DrawControlPoint();
00101 }
00102
00103 }
00104
00105 void ExCGizmoLineBezier::DrawLine()
00106 {
00107 int plouf;
00108 plouf=100;
00109 glColor3fv(m_Color.m_Vector);
00110 glBegin(GL_LINE_STRIP);
00111 for(float t = 0; t <= (1 + (1.0f / plouf)); t += 1.0f / plouf)
00112 {
00113
00114 glVertex3fv(PointOnCurve(t).m_Vector);
00115 }
00116 glEnd();
00117 }
00118
00119 void ExCGizmoLineBezier::DrawControlPoint()
00120 {
00121 glColor3f(1,1,1);
00122
00123 glPushMatrix();
00124 glTranslatef(m_OriginePoint.GetX(),m_OriginePoint.GetY(),m_OriginePoint.GetZ());
00125 glutWireSphere(0.5,4,4);
00126 glPopMatrix();
00127
00128 glPushMatrix();
00129 glTranslatef(m_ControlPoint1.GetX(),m_ControlPoint1.GetY(),m_ControlPoint1.GetZ());
00130 glutWireSphere(0.5,4,4);
00131 glPopMatrix();
00132
00133 glPushMatrix();
00134 glTranslatef(m_ControlPoint2.GetX(),m_ControlPoint2.GetY(),m_ControlPoint2.GetZ());
00135 glutWireSphere(0.5,4,4);
00136 glPopMatrix();
00137
00138 glPushMatrix();
00139 glTranslatef(m_EndPoint.GetX(),m_EndPoint.GetY(),m_EndPoint.GetZ());
00140 glutWireSphere(0.5,4,4);
00141 glPopMatrix();
00142 }
00143
00144 bool ExCGizmoLineBezier::LoadFile(std::string FileName)
00145 {
00146 Guard(bool ExCGizmoLineBezier::LoadFile(std::string FileName))
00147 SetFileName(FileName);
00148
00149
00150 char buffer[255];
00151 sprintf(buffer, "../Data/Gizmo/%s", FileName.data());
00152 std::ifstream fin;
00153 std::string buffstring;
00154 char b[256];
00155 fin.open(buffer,std::ios::in);
00156 if(fin.is_open())
00157 {
00158 try
00159 {
00160
00161
00162 memset(b,0,255);fin.getline(b,256,'\n');
00163
00164
00165 memset(b,0,255);fin.getline(b,256,'\n');
00166 buffstring=ExNihilo::ExtracValueFromSring(b,"<CtrlPoint0>","<#CtrlPoint0>");
00167 m_OriginePoint.SetValue(ExNihilo::ExtractFloatValueFromSring(buffstring,"<X>","<#X>"),
00168 ExNihilo::ExtractFloatValueFromSring(buffstring,"<Y>","<#Y>"),
00169 ExNihilo::ExtractFloatValueFromSring(buffstring,"<Z>","<#Z>"));
00170
00171
00172 memset(b,0,255);fin.getline(b,256,'\n');
00173 buffstring=ExNihilo::ExtracValueFromSring(b,"<CtrlPoint1>","<#CtrlPoint1>");
00174 m_ControlPoint1.SetValue(ExNihilo::ExtractFloatValueFromSring(buffstring,"<X>","<#X>"),
00175 ExNihilo::ExtractFloatValueFromSring(buffstring,"<Y>","<#Y>"),
00176 ExNihilo::ExtractFloatValueFromSring(buffstring,"<Z>","<#Z>"));
00177
00178
00179 memset(b,0,255);fin.getline(b,256,'\n');
00180 buffstring=ExNihilo::ExtracValueFromSring(b,"<CtrlPoint2>","<#CtrlPoint2>");
00181 m_ControlPoint2.SetValue(ExNihilo::ExtractFloatValueFromSring(buffstring,"<X>","<#X>"),
00182 ExNihilo::ExtractFloatValueFromSring(buffstring,"<Y>","<#Y>"),
00183 ExNihilo::ExtractFloatValueFromSring(buffstring,"<Z>","<#Z>"));
00184
00185
00186 memset(b,0,255);fin.getline(b,256,'\n');
00187 buffstring=ExNihilo::ExtracValueFromSring(b,"<CtrlPoint3>","<#CtrlPoint3>");
00188 m_EndPoint.SetValue(ExNihilo::ExtractFloatValueFromSring(buffstring,"<X>","<#X>"),
00189 ExNihilo::ExtractFloatValueFromSring(buffstring,"<Y>","<#Y>"),
00190 ExNihilo::ExtractFloatValueFromSring(buffstring,"<Z>","<#Z>"));
00191 fin.close();
00192
00193
00194 }catch(...){throw ExCExpFileReadError();}
00195 }else throw ExCExpFileNotFound();
00196 return true;
00197 UnGuard
00198 }