static tuple intersectTuple(Line3<T> &line, const tuple &t0, const tuple &t1, const tuple &t2) { if(t0.attr("__len__")() == 3 && t1.attr("__len__")() == 3 && t2.attr("__len__")() == 3) { Vec3<T> v0, v1, v2, pt, bar; bool front; v0.x = extract<T>(t0[0]); v0.y = extract<T>(t0[1]); v0.z = extract<T>(t0[2]); v1.x = extract<T>(t1[0]); v1.y = extract<T>(t1[1]); v1.z = extract<T>(t1[2]); v2.x = extract<T>(t2[0]); v2.y = extract<T>(t2[1]); v2.z = extract<T>(t2[2]); if(Imath::intersect(line, v0, v1, v2, pt, bar, front)) { tuple t = make_tuple(pt, bar, front); return t; } else { tuple t; return t; } } else THROW(Iex::LogicExc, "Line3 expects tuple of length 3"); }
static CompoundDataPlugPtr compoundDataPlugConstructor( const char *name, Plug::Direction direction, unsigned flags, tuple children ) { CompoundDataPlugPtr result = new CompoundDataPlug( name, direction, flags ); size_t s = extract<size_t>( children.attr( "__len__" )() ); for( size_t i=0; i<s; i++ ) { Gaffer::PlugPtr c = extract<Gaffer::PlugPtr>( children[i] ); result->addChild( c ); } return result; }
static void setTuple(Line3<T> &line, const tuple &t0, const tuple &t1) { MATH_EXC_ON; Vec3<T> v0, v1; if(t0.attr("__len__")() == 3 && t1.attr("__len__")() == 3) { v0.x = extract<T>(t0[0]); v0.y = extract<T>(t0[1]); v0.z = extract<T>(t0[2]); v1.x = extract<T>(t1[0]); v1.y = extract<T>(t1[1]); v1.z = extract<T>(t1[2]); line.set(v0, v1); } else THROW(Iex::LogicExc, "Line3 expects tuple of length 3"); }
static Vec3<T> closestVertexTuple(Line3<T> &line, const tuple &t0, const tuple &t1, const tuple &t2) { MATH_EXC_ON; if(t0.attr("__len__")() == 3 && t1.attr("__len__")() == 3 && t2.attr("__len__")() == 3) { Vec3<T> v0, v1, v2; v0.x = extract<T>(t0[0]); v0.y = extract<T>(t0[1]); v0.z = extract<T>(t0[2]); v1.x = extract<T>(t1[0]); v1.y = extract<T>(t1[1]); v1.z = extract<T>(t1[2]); v2.x = extract<T>(t2[0]); v2.y = extract<T>(t2[1]); v2.z = extract<T>(t2[2]); return Imath::closestVertex(v0, v1, v2, line); } else THROW(Iex::LogicExc, "Line3 expects tuple of length 3"); }
static void setPositionTuple(Line3<T> &line, const tuple &t) { Vec3<T> pos; if(t.attr("__len__")() == 3) { pos.x = extract<T>(t[0]); pos.y = extract<T>(t[1]); pos.z = extract<T>(t[2]); line.pos = pos; } else THROW(Iex::LogicExc, "Line3 expects tuple of length 3"); }
static T distanceToTuple(Line3<T> line, const tuple &t) { Vec3<T> v; if(t.attr("__len__")() == 3) { v.x = extract<T>(t[0]); v.y = extract<T>(t[1]); v.z = extract<T>(t[2]); return line.distanceTo(v); } else THROW(Iex::LogicExc, "Line3 expects tuple of length 3"); }
static Vec3<T> rotatePointTuple(Line3<T> &line, const tuple &t, const T &r) { MATH_EXC_ON; if(t.attr("__len__")() == 3) { Vec3<T> p; p.x = extract<T>(t[0]); p.y = extract<T>(t[1]); p.z = extract<T>(t[2]); return Imath::rotatePoint(p, line, r); } else THROW(Iex::LogicExc, "Line3 expects tuple of length 3"); }
static void setDirectionTuple(Line3<T> &line, const tuple &t) { MATH_EXC_ON; Vec3<T> dir; if(t.attr("__len__")() == 3) { dir.x = extract<T>(t[0]); dir.y = extract<T>(t[1]); dir.z = extract<T>(t[2]); line.dir = dir.normalized(); } else THROW(Iex::LogicExc, "Line3 expects tuple of length 3"); }
static Vec3<T> closestPointToTuple(Line3<T> line, const tuple &t) { MATH_EXC_ON; Vec3<T> v; if(t.attr("__len__")() == 3) { v.x = extract<T>(t[0]); v.y = extract<T>(t[1]); v.z = extract<T>(t[2]); return line.closestPointTo(v); } else THROW(Iex::LogicExc, "Line3 expects tuple of length 3"); }