void Primitive :: GetTangentialSurfaceIndices (const Point<3> & p, ARRAY<int> & surfind, double eps) const { for (int j = 0; j < GetNSurfaces(); j++) if (fabs (GetSurface(j).CalcFunctionValue (p)) < eps) if (!surfind.Contains (GetSurfaceId(j))) surfind.Append (GetSurfaceId(j)); }
void EcoreXRenderSurface::Init( Any surface ) { // see if there is a surface in Any surface unsigned int surfaceId = GetSurfaceId( surface ); // if the surface is empty, create a new one. if ( surfaceId == 0 ) { // we own the surface about to created mOwnSurface = true; CreateXRenderable(); } else { // XLib should already be initialized so no point in calling XInitThreads UseExistingRenderable( surfaceId ); } #ifdef DEBUG_ENABLED // prints out 'INFO: DALI: new EcoreXRenderSurface, used existing surface xx // we can not use LOG_INFO because the surface can be created before Dali Core is created. printf( "INFO: DALI: new EcoreXRenderSurface, %s surface %X \n", mOwnSurface?"created":"used existing", GetDrawable() ); #endif }
void Polyhedra :: GetTangentialVecSurfaceIndices2 (const Point<3> & p, const Vec<3> & v1, const Vec<3> & v2, ARRAY<int> & surfind, double eps) const { Vec<3> v1n = v1; v1n.Normalize(); Vec<3> v2n = v2; // - (v2 * v1n) * v1n; v2n.Normalize(); for (int i = 0; i < faces.Size(); i++) { const Point<3> & p1 = points[faces[i].pnums[0]]; Vec<3> v0 = p - p1; if (fabs (v0 * faces[i].nn) > eps) continue; // n->nn if (fabs (v1n * faces[i].nn) > eps_base1) continue; // n->nn if (fabs (v2n * faces[i].nn) > eps_base1) continue; // n->nn double lam01 = (faces[i].w1 * v0); double lam02 = (faces[i].w2 * v0); double lam03 = 1-lam01-lam02; double lam11 = (faces[i].w1 * v1); double lam12 = (faces[i].w2 * v1); double lam13 = -lam11-lam12; double lam21 = (faces[i].w1 * v2); double lam22 = (faces[i].w2 * v2); double lam23 = -lam21-lam22; bool ok1 = lam01 > eps_base1 || lam01 > -eps_base1 && lam11 > eps_base1 || lam01 > -eps_base1 && lam11 > -eps_base1 && lam21 > eps_base1; bool ok2 = lam02 > eps_base1 || lam02 > -eps_base1 && lam12 > eps_base1 || lam02 > -eps_base1 && lam12 > -eps_base1 && lam22 > eps_base1; bool ok3 = lam03 > eps_base1 || lam03 > -eps_base1 && lam13 > eps_base1 || lam03 > -eps_base1 && lam13 > -eps_base1 && lam23 > eps_base1; if (ok1 && ok2 && ok3) { if (!surfind.Contains (GetSurfaceId(faces[i].planenr))) surfind.Append (GetSurfaceId(faces[i].planenr)); } } }
void Primitive :: GetTangentialVecSurfaceIndices2 (const Point<3> & p, const Vec<3> & v1, const Vec<3> & v2, ARRAY<int> & surfind, double eps) const { for (int j = 0; j < GetNSurfaces(); j++) { if (fabs (GetSurface(j).CalcFunctionValue (p)) < eps) { Vec<3> grad; GetSurface(j).CalcGradient (p, grad); if (sqr (grad * v1) < 1e-6 * v1.Length2() * grad.Length2() && sqr (grad * v2) < 1e-6 * v2.Length2() * grad.Length2() ) // new, 18032006 JS { if (!surfind.Contains (GetSurfaceId(j))) surfind.Append (GetSurfaceId(j)); } } } }
void Polyhedra :: GetTangentialSurfaceIndices (const Point<3> & p, ARRAY<int> & surfind, double eps) const { for (int i = 0; i < faces.Size(); i++) { const Point<3> & p1 = points[faces[i].pnums[0]]; Vec<3> v0 = p - p1; double lam3 = -(faces[i].nn * v0); // n->nn if (fabs (lam3) > eps) continue; double lam1 = (faces[i].w1 * v0); double lam2 = (faces[i].w2 * v0); if (lam1 >= -eps_base1 && lam2 >= -eps_base1 && lam1+lam2 <= 1+eps_base1) if (!surfind.Contains (GetSurfaceId(i))) surfind.Append (GetSurfaceId(i)); } }