MsqMatrix<3,2> LVQDTargetTest::target( const double* L, const MsqMatrix<3,2>* V, const MsqMatrix<2,2>* Q, const MsqMatrix<2,2>* D ) { ConstantTarget W_size ( L ? *L : 1.0, true ); ConstantTarget W_orient( V ? *V : I32 ); ConstantTarget W_skew ( Q ? *Q : I22 ); ConstantTarget W_aspect( D ? *D : I22 ); LVQDTargetCalculator LVQD( L ? &W_size : NULL, V ? &W_orient : NULL, Q ? &W_skew : NULL, D ? &W_aspect : NULL ); MsqError err; MsqMatrix<3,2> W; bool v; if (!V) { MsqMatrix<2,2> W_2D; v = LVQD.get_2D_target( pd2D, 0, Sample(0,0), W_2D, err ); W.set_row( 0, W_2D.row(0) ); W.set_row( 1, W_2D.row(1) ); W.set_row( 2, MsqMatrix<1,2>(0.0) ); } else { v = LVQD.get_surface_target( pd2D, 0, Sample(0,0), W, err ); } ASSERT_NO_ERROR(err); CPPUNIT_ASSERT(v); return W; }
bool get_surface_target( PatchData& pd, size_t element, Sample sample, MsqMatrix<3,2>& W_out, MsqError& err ) { MsqMatrix<2,2> W; bool rval = get_2D_target( pd, element, sample, W, err ); W_out.set_row( 0, W.row(0) ); W_out.set_row( 1, W.row(1) ); W_out.set_row( 2, MsqMatrix<1,2>(0.0) ); return rval; }