#include <TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp>


Public Member Functions | |
| void | AdvSim (T tCurrent) |
| Advance a simulation step with a predefined time step. | |
| void | AdvSim (T tCurrent, T tNext) |
| Advance a simulation step. | |
| void | ClearAllForces () |
| Clear (all) forces (and maybe velocities too). | |
| int | GetNumSimSubSteps () const |
| Get number of simulation sub-steps. | |
| T | GetPredefinedTimeStep () const |
| Get the predefined time step in sec. | |
| std::vector< SpringRef< T > * > & | GetSpringList () |
| std::vector< SpringRef< T > * > const & | GetSpringList () const |
| Get spring list. | |
| std::vector < HEVertexPtrWithExtraInfo< T > * > & | GetVertexList () |
| std::vector < HEVertexPtrWithExtraInfo< T > * > const & | GetVertexList () const |
| Get vertex list. | |
| void | SetNumSimSubSteps (int i) |
| Set number of simulation sub-steps. | |
| bool | SetODESolver (TAPs::Enum::ODESolver solverMethod) |
| Set the ODE solver. | |
| void | SetPredefinedTimeStep (T ts) |
| Set the predefined time step in sec. | |
| SimPropForMultiPartMeshModel_HalfEdge (T massOfPoint=1, T springStiffness=1, T springDamper=1, TAPs::Enum::ModelType modelType=TAPs::Enum::MODEL_DEFORM, T predefinedTimeStep=0.01, int numSimSubSteps=10, bool enableColDet=true, bool enableSimulation=true) | |
| Constructor. | |
| int | Size () const |
| virtual std::string | StrInfo () const |
| Assignment operator. | |
| void | UpdateStateToArray () |
| For update simulation. | |
| ~SimPropForMultiPartMeshModel_HalfEdge () | |
| Copy constructor. | |
Protected Member Functions | |
| void | ArrayToState (T *src) |
| void | DdtStateToArray (T *xdot, T dt) |
| void | StateToArray (T *dst) |
Static Protected Member Functions | |
| static bool | DxDt (T dt, MATH::VectorSet< T > &x, MATH::VectorSet< T > &xdot, void *userData) |
Protected Attributes | |
| std::vector < HEVertexPtrWithExtraInfo< T > * > | m_HEVertexPtrList |
| list of half-edge vertices | |
| int | m_iLimitStepCount |
| Limit step count. | |
| int | m_iNumSimSubSteps |
| number of simulation sub-steps for moving from current time to next time | |
| int | m_iStateSize |
| Mass Points (mesh vertices) where 6 = 3 positions + 3 velocities (for x,y,z) | |
| TAPs::MATH::ODESolver< T > * | m_prODESolver |
| ODE solver. | |
| T | m_tPredefinedTimeStep |
| predefined time step in sec | |
| std::vector< SpringRef< T > * > | m_vpSpringRef |
| Clear memory allocation. | |
| MATH::VectorSet< T > * | x0 |
| pointer to x0 Data | |
| MATH::VectorSet< T > | xData_1 |
| temp data with size of m_iStateSize * 6 | |
| MATH::VectorSet< T > | xData_2 |
| temp data with size of m_iStateSize * 6 | |
| MATH::VectorSet< T > * | xEnd |
| pointer to xEnd Data | |
Friends | |
| std::ostream & | operator<< (std::ostream &output, SimPropForMultiPartMeshModel_HalfEdge< T > const &obj) |
| Output Operator <<. | |
Definition at line 19 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
| BEGIN_NAMESPACE_TAPs SimPropForMultiPartMeshModel_HalfEdge< T >::SimPropForMultiPartMeshModel_HalfEdge | ( | T | massOfPoint = 1, |
|
| T | springStiffness = 1, |
|||
| T | springDamper = 1, |
|||
| TAPs::Enum::ModelType | modelType = TAPs::Enum::MODEL_DEFORM, |
|||
| T | predefinedTimeStep = 0.01, |
|||
| int | numSimSubSteps = 10, |
|||
| bool | enableColDet = true, |
|||
| bool | enableSimulation = true | |||
| ) | [inline] |
Constructor.
| massOfPoint | mass of point |
| springStiffness | spring stiffness value |
| springDamper | spring damper value |
| modelType | type of model |
| predefinedTimeStep | predefined time step in sec |
| numSimSubSteps | number of simulation sub-steps |
| enableColDet | collision detection on/off status |
| enableSimulation | simulation on/off status |
Definition at line 20 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00030 : SimPropForMultiPartMeshModel<T>( 00031 springStiffness, 00032 springDamper, 00033 massOfPoint, 00034 modelType, 00035 enableColDet, 00036 enableSimulation 00037 ) 00038 , m_prODESolver( NULL ) 00039 , m_tPredefinedTimeStep( predefinedTimeStep ) 00040 , m_iNumSimSubSteps( numSimSubSteps ) 00041 #ifdef TAPs_USE_CUDA 00042 , m_cudaVertexList( NULL ) 00043 #endif TAPs_USE_CUDA 00044 {}
| SimPropForMultiPartMeshModel_HalfEdge< T >::~SimPropForMultiPartMeshModel_HalfEdge | ( | ) | [inline] |
Copy constructor.
Destructor.
Destructor
Definition at line 89 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00090 { 00091 if ( m_prODESolver ) delete m_prODESolver; 00092 00093 #ifdef TAPs_USE_CUDA 00094 CUDA_Cleanup(); 00095 #endif//TAPs_USE_CUDA 00096 }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::AdvSim | ( | T | tCurrent | ) | [inline] |
Advance a simulation step with a predefined time step.
Definition at line 80 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00081 { AdvSim( tCurrent, tCurrent + GetPredefinedTimeStep() ); }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::AdvSim | ( | T | tCurrent, | |
| T | tNext | |||
| ) | [inline] |
Advance a simulation step.
Definition at line 312 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00313 { 00314 if ( IsSimOn() == false ) return; 00315 00316 switch ( GetModelType() ) { 00317 case TAPs::Enum::MODEL_DEFORM: 00318 //std::cout << "\tMODEL_DEFORM\n"; 00319 //break; 00320 00321 #ifdef TAPs_USE_CUDA 00322 CUDA_CopyVertexToMem(); 00323 TAPsCUDA__global__SimPropForMultiPartMeshModel_HalfEdge_AdvSim( 00324 m_HEVertexPtrList.size(), 00325 64, 00326 tCurrent, tNext, 00327 m_cudaVertexList 00328 ); 00329 CUDA_CopyMemToVertex(); 00330 #else //TAPs_USE_CUDA 00331 { 00332 T tSubStepTime = ( tNext - tCurrent ) / m_iNumSimSubSteps; 00333 tNext = tCurrent + tSubStepTime; 00334 for ( int i = 0; i < m_iNumSimSubSteps; ++i ) 00335 { 00336 //----------------------------------------------------- 00337 // Swap pointers 00338 MATH::VectorSet<T> * tmpPtr = x0; 00339 x0 = xEnd; 00340 xEnd = tmpPtr; 00341 //----------------------------------------------------- 00342 // ODE Solver 00343 m_prODESolver->Solve( *x0, *xEnd, tCurrent, tNext, DxDt, this ); 00344 //----------------------------------------------------- 00345 // Copy xEnd to object state (position and velocity of particles) 00346 ArrayToState( &(*xEnd)[0] ); 00347 //----------------------------------------------------- 00348 //SimGravity( tCurrent, tNext ); 00349 //----------------------------------------------------- 00350 //GetBVHTree()->Update(); 00351 //CalAndSetNormals(); 00352 tCurrent = tNext; 00353 tNext += tSubStepTime; 00354 } 00355 } 00356 #endif//TAPs_USE_CUDA 00357 break; 00358 00359 case TAPs::Enum::MODEL_DEFORM_ELASTIC: 00360 //std::cout << "\tMODEL_DEFORM_ELASTIC\n"; 00361 //break; 00362 { 00363 std::vector< HEVertexPtrWithExtraInfo<T> * >::iterator pos = m_HEVertexPtrList.begin(); 00364 while ( pos != m_HEVertexPtrList.end() ) { 00365 //(*pos)->SetHomePosition( (*pos)->GetHomePosition() + Vector3<T>(0,0,-0.001) ); 00366 (*pos)->GetParticleRef()->SetPosition( (*pos)->GetHomePosition() ); 00367 ++pos; 00368 } 00369 } 00370 break; 00371 case TAPs::Enum::MODEL_DEFORM_PLASTIC: 00372 break; 00373 case TAPs::Enum::MODEL_RIGID: 00374 break; 00375 case TAPs::Enum::MODEL_FIXED: 00376 break; 00377 } 00378 }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::ArrayToState | ( | T * | src | ) | [inline, protected] |
Definition at line 205 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00206 { 00207 for ( int i = 0; i < m_iStateSize; ++i ) { 00208 m_HEVertexPtrList[i]->GetParticleRef()->SetPosition( *src, *(src+1), *(src+2) ); 00209 src += 3; 00210 m_HEVertexPtrList[i]->GetParticleRef()->SetVelocity( *src, *(src+1), *(src+2) ); 00211 src += 3; 00212 } 00213 }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::ClearAllForces | ( | ) | [inline] |
Clear (all) forces (and maybe velocities too).
Definition at line 246 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00247 { 00248 for ( int i = 0; i < static_cast<int>( m_HEVertexPtrList.size() ); ++i ) { 00249 m_HEVertexPtrList[i]->GetParticleRef()->SetForce( 0, 0, 0 ); 00250 m_HEVertexPtrList[i]->GetHomeParticle().SetForce( 0, 0, 0 ); 00251 } 00252 }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::DdtStateToArray | ( | T * | xdot, | |
| T | dt | |||
| ) | [inline, protected] |
Definition at line 218 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00219 { 00220 for ( int i = 0; i < m_iStateSize; ++i ) { 00221 if ( m_HEVertexPtrList[i]->GetParticleRef()->GetFixStatus() ) { 00222 *(xdot++) = 00223 *(xdot++) = 00224 *(xdot++) = 00225 *(xdot++) = 00226 *(xdot++) = 00227 *(xdot++) = 0; 00228 } 00229 else { 00230 //m_prForce[i] = m_StructForce[i].gravity; 00231 //m_prVelocity[i][1] = m_prForce[i][1] * m_prVertex[i][1] * dt; 00232 //---------------------------------------- 00233 *(xdot++) = m_HEVertexPtrList[i]->GetParticleRef()->GetVelocity()[0]; 00234 *(xdot++) = m_HEVertexPtrList[i]->GetParticleRef()->GetVelocity()[1]; 00235 *(xdot++) = m_HEVertexPtrList[i]->GetParticleRef()->GetVelocity()[2]; 00236 *(xdot++) = m_HEVertexPtrList[i]->GetParticleRef()->GetForce()[0]; 00237 *(xdot++) = m_HEVertexPtrList[i]->GetParticleRef()->GetForce()[1]; 00238 *(xdot++) = m_HEVertexPtrList[i]->GetParticleRef()->GetForce()[2]; 00239 } 00240 } 00241 }
| bool SimPropForMultiPartMeshModel_HalfEdge< T >::DxDt | ( | T | dt, | |
| MATH::VectorSet< T > & | x, | |||
| MATH::VectorSet< T > & | xdot, | |||
| void * | userData | |||
| ) | [inline, static, protected] |
Definition at line 138 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00139 : time step 00140 MATH::VectorSet<T> & x, // I/p: array x = {pos, vel} 00141 MATH::VectorSet<T> & xdot, // O/P: array xdot = {vel, accel} 00142 void * userData // O/P: array of user data 00143 ) 00144 { 00145 //----------------------------------------------------- 00146 // Convert userData ptr to ModelStrand ptr 00147 SimPropForMultiPartMeshModel_HalfEdge<T> *pThis = static_cast<SimPropForMultiPartMeshModel_HalfEdge<T> *>( userData ); 00148 assert( pThis ); 00149 00150 pThis->ClearAllForces(); 00151 //----------------------------------------------------- 00152 // Calculate and Set Spring Forces 00153 for ( int i = 0; i < static_cast<int>( pThis->m_vpSpringRef.size() ); ++i ) { 00154 pThis->m_vpSpringRef[i]->CalAndSetForce(); 00155 // //std::cout << "Force1: " << pThis->m_vpSpringRef[i]->GetForce1() << "\n"; 00156 // //std::cout << "Force2: " << pThis->m_vpSpringRef[i]->GetForce2() << "\n"; 00157 } 00158 00159 /* 00160 //----------------------------------------------------- 00161 for ( int i = 0; i < pThis->m_iStateSize; ++i ) { 00162 // pThis->(*m_pHEVertexList)[i].GetListParticleRef()->SetVelocity( 0, 0, 0 ); 00163 // pThis->(*m_pHEVertexList)[i].GetListParticleRef()->SetForce( 0, 0, 0 ); 00164 00165 if ( pThis->m_HEVertexPtrList[i]->GetParticleRef()->GetFixStatus() ) { 00166 pThis->m_HEVertexPtrList[i]->GetParticleRef()->SetVelocity( 0, 0, 0 ); 00167 pThis->m_HEVertexPtrList[i]->GetParticleRef()->SetForce( 0, 0, 0 ); 00168 } 00169 else { 00170 // pThis->m_pHEVertexList[i]->GetListParticleRef()->SetForce( 0, 0, 0 ); 00171 // pThis->m_prForce[i] = pThis->m_StructForce[i].gravity; 00172 // pThis->m_prVelocity[i][1] = pThis->m_prForce[i][1] * 00173 // pThis->m_prVertex[i][1] * 00174 // dt; 00175 Vector3<T> newForce = pThis->m_HEVertexPtrList[i]->GetParticleRef()->GetForce() / 10; 00176 pThis->m_HEVertexPtrList[i]->GetParticleRef()->SetForce( newForce ); 00177 } 00178 } 00179 //*/ 00180 00181 //----------------------------------------------------- 00182 pThis->DdtStateToArray( &xdot[0], dt ); 00183 //----------------------------------------------------- 00184 return true; 00185 }
| int SimPropForMultiPartMeshModel_HalfEdge< T >::GetNumSimSubSteps | ( | ) | const [inline] |
Get number of simulation sub-steps.
Definition at line 89 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00089 { return m_iNumSimSubSteps; }
| T SimPropForMultiPartMeshModel_HalfEdge< T >::GetPredefinedTimeStep | ( | ) | const [inline] |
Get the predefined time step in sec.
Definition at line 84 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00084 { return m_tPredefinedTimeStep; }
| std::vector< SpringRef<T> * >& SimPropForMultiPartMeshModel_HalfEdge< T >::GetSpringList | ( | ) | [inline] |
Definition at line 68 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00068 { return m_vpSpringRef; }
| std::vector< SpringRef<T> * > const& SimPropForMultiPartMeshModel_HalfEdge< T >::GetSpringList | ( | ) | const [inline] |
Get spring list.
Definition at line 67 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00067 { return m_vpSpringRef; }
| std::vector< HEVertexPtrWithExtraInfo<T> * >& SimPropForMultiPartMeshModel_HalfEdge< T >::GetVertexList | ( | ) | [inline] |
Definition at line 64 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00064 { return m_HEVertexPtrList; }
| std::vector< HEVertexPtrWithExtraInfo<T> * > const& SimPropForMultiPartMeshModel_HalfEdge< T >::GetVertexList | ( | ) | const [inline] |
Get vertex list.
Definition at line 63 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00063 { return m_HEVertexPtrList; }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::SetNumSimSubSteps | ( | int | i | ) | [inline] |
Set number of simulation sub-steps.
Definition at line 91 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00091 { m_iNumSimSubSteps = i; }
| bool SimPropForMultiPartMeshModel_HalfEdge< T >::SetODESolver | ( | TAPs::Enum::ODESolver | solverMethod | ) | [inline] |
Set the ODE solver.
Definition at line 257 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00259 { 00260 // Delete the current ODE solver 00261 if ( m_prODESolver ) delete m_prODESolver; 00262 00263 bool result = true; 00264 //--------------------------------------------------------------- 00265 // For Simulation 00266 switch ( solverMethod ) { 00267 case TAPs::Enum::EULER: 00268 if ( ( m_prODESolver = new MATH::ODESolverEuler<T>() ) == NULL ) { 00269 result = false; 00270 } 00271 break; 00272 case TAPs::Enum::MIDPOINT: 00273 if ( ( m_prODESolver = new MATH::ODESolverMidpoint<T>() ) == NULL ) { 00274 result = false; 00275 } 00276 break; 00277 case TAPs::Enum::RUNGE_KUTTA_4: 00278 if ( ( m_prODESolver = new MATH::ODESolverRungeKutta4<T>() ) == NULL ) { 00279 result = false; 00280 } 00281 break; 00282 default: 00283 result = false; 00284 break; 00285 } 00286 00287 if ( result ) { 00288 m_iStateSize = static_cast<int>( m_HEVertexPtrList.size() ); 00289 int size = m_iStateSize * 6; 00290 m_prODESolver->SetSize( size ); 00291 x0 = &xData_1; 00292 xEnd = &xData_2; 00293 x0->resize( size ); 00294 xEnd->resize( size ); 00295 StateToArray( &(*xEnd)[0] ); 00296 } 00297 else { 00298 #ifdef TAPs_ENABLE_DEBUG 00299 std::cerr << "ERROR => HETriMeshOneModelMultiParts Constructor:" 00300 << " Cannot allocate memory for an ODE solver!" 00301 << std::endl; 00302 #endif 00303 delete this; 00304 } 00305 00306 return result; 00307 }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::SetPredefinedTimeStep | ( | T | ts | ) | [inline] |
Set the predefined time step in sec.
Definition at line 86 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00086 { m_tPredefinedTimeStep = ts; }
| int SimPropForMultiPartMeshModel_HalfEdge< T >::Size | ( | ) | const [inline] |
Definition at line 60 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00060 { return m_iStateSize; }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::StateToArray | ( | T * | dst | ) | [inline, protected] |
Definition at line 190 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00191 { 00192 for ( int i = 0; i < m_iStateSize; ++i ) { 00193 *(dst++) = m_HEVertexPtrList[i]->GetParticleRef()->GetPosition()[0]; 00194 *(dst++) = m_HEVertexPtrList[i]->GetParticleRef()->GetPosition()[1]; 00195 *(dst++) = m_HEVertexPtrList[i]->GetParticleRef()->GetPosition()[2]; 00196 *(dst++) = m_HEVertexPtrList[i]->GetParticleRef()->GetVelocity()[0]; 00197 *(dst++) = m_HEVertexPtrList[i]->GetParticleRef()->GetVelocity()[1]; 00198 *(dst++) = m_HEVertexPtrList[i]->GetParticleRef()->GetVelocity()[2]; 00199 } 00200 }
| std::string SimPropForMultiPartMeshModel_HalfEdge< T >::StrInfo | ( | ) | const [inline, virtual] |
Assignment operator.
Return this object info as a string.
Return this object info as a string
Reimplemented from SimPropForMultiPartMeshModel< T >.
Definition at line 101 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.cpp.
00102 { 00103 std::ostringstream ss; 00104 ss << "SimPropForMultiPartMeshModel_HalfEdge<" << typeid(T).name() << "> ==>" 00105 << " Spring Stiffness(" << m_tKStiffness 00106 << ") Damper(" << m_tKDamper 00107 << ") Mass of Point (" << m_tPtMass 00108 << ") Collision Detection ("; 00109 if ( m_bColDetOn ) ss << "On"; 00110 else ss << "Off"; 00111 ss << ") Simulation ("; 00112 if ( m_bSimOn ) ss << "On"; 00113 else ss << "Off"; 00114 ss << ".\n"; 00115 return ss.str(); 00116 }
| void SimPropForMultiPartMeshModel_HalfEdge< T >::UpdateStateToArray | ( | ) | [inline] |
For update simulation.
Definition at line 95 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00096 { 00097 if ( GetModelType() == TAPs::Enum::MODEL_DEFORM ) { 00098 StateToArray( &(*xEnd)[0] ); 00099 } 00100 }
| std::ostream& operator<< | ( | std::ostream & | output, | |
| SimPropForMultiPartMeshModel_HalfEdge< T > const & | obj | |||
| ) | [friend] |
Output Operator <<.
Definition at line 23 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
00025 { 00026 output << obj.StrInfo(); 00027 return output; 00028 }
std::vector< HEVertexPtrWithExtraInfo<T> * > SimPropForMultiPartMeshModel_HalfEdge< T >::m_HEVertexPtrList [protected] |
list of half-edge vertices
Definition at line 145 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
int SimPropForMultiPartMeshModel_HalfEdge< T >::m_iLimitStepCount [protected] |
int SimPropForMultiPartMeshModel_HalfEdge< T >::m_iNumSimSubSteps [protected] |
number of simulation sub-steps for moving from current time to next time
Definition at line 164 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
int SimPropForMultiPartMeshModel_HalfEdge< T >::m_iStateSize [protected] |
Mass Points (mesh vertices) where 6 = 3 positions + 3 velocities (for x,y,z)
Definition at line 160 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
TAPs::MATH::ODESolver<T>* SimPropForMultiPartMeshModel_HalfEdge< T >::m_prODESolver [protected] |
T SimPropForMultiPartMeshModel_HalfEdge< T >::m_tPredefinedTimeStep [protected] |
predefined time step in sec
Definition at line 163 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
std::vector< SpringRef<T> * > SimPropForMultiPartMeshModel_HalfEdge< T >::m_vpSpringRef [protected] |
Clear memory allocation.
Simulation for HalfEdge Model list of springs
Definition at line 144 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
MATH::VectorSet<T>* SimPropForMultiPartMeshModel_HalfEdge< T >::x0 [protected] |
MATH::VectorSet<T> SimPropForMultiPartMeshModel_HalfEdge< T >::xData_1 [protected] |
temp data with size of m_iStateSize * 6
Definition at line 158 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
MATH::VectorSet<T> SimPropForMultiPartMeshModel_HalfEdge< T >::xData_2 [protected] |
temp data with size of m_iStateSize * 6
Definition at line 159 of file TAPsSimPropForMultiPartMeshModel_HalfEdge.hpp.
MATH::VectorSet<T>* SimPropForMultiPartMeshModel_HalfEdge< T >::xEnd [protected] |
1.5.6