-
Notifications
You must be signed in to change notification settings - Fork 0
/
ForceModifier.cpp
43 lines (31 loc) · 1.19 KB
/
ForceModifier.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "ForceModifier.h"
#include "Physics_kernels.h"
#include "Solid.h"
ForceModifier::ForceModifier(Solid* solid, PolyShape* bVolume, float3 addForce) :
Modifier(bVolume), selectionMade(false), addForce(addForce) {
color = make_float4(0.57, 0.37, 0.04, 0.7);
}
ForceModifier::~ForceModifier() {
}
void ForceModifier::SelectNodes(Solid* solid) {
// Initialize points to be in front of all planes
CudaMemset(pIntersect, true, sizeof(bool)*solid->vertexpool->size);
// Test intersection with bounding volume
testCollision(solid, bVolume, pIntersect);
if( colorBuffer != NULL ) {
CUDA_SAFE_CALL(cudaGLMapBufferObject( (void**)&colorBuffer->buf, colorBuffer->vboID));
colorSelection(solid, colorBuffer, pIntersect);
CUDA_SAFE_CALL(cudaGLUnmapBufferObject( colorBuffer->vboID ));
selectionMade = true;
}
}
void ForceModifier::SetForce(float3 force) {
addForce = force;
}
void ForceModifier::ApplyModifierStrategy(Solid* solid) {
// Call constraint function
applyForceToIntersectingNodes(solid, addForce, pIntersect);
if( colorBuffer != NULL && selectionMade ) {
colorSelection(solid, colorBuffer, pIntersect);
}
}