void Hand::initialiseFinger( Digit finger, glm::mat4 start, double params[NUM_PARAMETERS]) { double coneRatio = 0.95; double lengthUpdate = 0.5; double diameter = diameters[finger]; double length = lengths[finger]; glm::mat4 s, t, r, c, current; // Where finger joins the palm s = glm::scale(s, glm::vec3(diameter, diameter, diameter)); sphereWVPs.push_back(start * s); double temp = 0.0f; current = initialiseJoint( start, ¶ms[getParamPos(finger, ROT_1X)], ¶ms[getParamPos(finger, ROT_1Z)], diameter, length, coneRatio); diameter *= coneRatio; length *= lengthUpdate; current = initialiseJoint( current, &temp, ¶ms[getParamPos(finger, ROT_2Z)], diameter, length, coneRatio); coneRatio = 0.8; diameter *= coneRatio; // length *= lengthUpdate; current = initialiseJoint( current, &temp, ¶ms[getParamPos(finger, ROT_3Z)], diameter, length, coneRatio); }
status initialiseLine(Line ln, Int xa, Int ya, Int xb, Int yb, Name arrows) { if ( isDefault(xa) ) xa = ZERO; if ( isDefault(ya) ) ya = ZERO; if ( isDefault(xb) ) xb = ZERO; if ( isDefault(yb) ) yb = ZERO; assign(ln, start_x, xa); assign(ln, start_y, ya); assign(ln, end_x, xb); assign(ln, end_y, yb); initialiseJoint((Joint) ln, ZERO, ZERO, ZERO, ZERO, arrows); return requestComputeGraphical(ln, DEFAULT); }
static status initialiseArc(Arc a, Int radius, Real start_angle, Real size_angle) { initialiseJoint((Joint) a, ZERO, ZERO, ZERO, ZERO, DEFAULT); if ( isDefault(radius) ) radius = getClassVariableValueObject(a, NAME_radius); if ( isDefault(start_angle) ) start_angle = CtoReal(0.0); if ( isDefault(size_angle) ) size_angle = CtoReal(90.0); assign(a, size, newObject(ClassSize, radius, radius, EAV)); assign(a, position, newObject(ClassPoint, EAV)); assign(a, start_angle, start_angle); assign(a, size_angle, size_angle); assign(a, close, NAME_none); return requestComputeGraphical(a, DEFAULT); }