| 222 | } |
| 223 | |
| 224 | vector<string> GenerateEdgeData( shared_ptr<MeshAccess> ma, |
| 225 | shared_ptr<CoefficientFunction> cf, |
| 226 | int order) { |
| 227 | // generate wireframe data |
| 228 | LocalHeapMem<100000> lh("webgui_edge_data"); |
| 229 | auto vb = ma->GetDimension() == 3 ? BBND : BND; |
| 230 | Array<double> edge_data; |
| 231 | auto comps = cf->Dimension(); |
| 232 | for (auto elnr : Range(ma->GetNElements(1))) { |
| 233 | HeapReset hr(lh); |
| 234 | |
| 235 | auto el = ma->GetElement({vb, elnr}); |
| 236 | auto &ir = GetElementPoints(el.GetType(), order); |
| 237 | auto &trafo = ma->GetTrafo(el, lh); |
| 238 | BaseMappedIntegrationRule &mir = trafo(ir, lh); |
| 239 | FlatMatrix<> values(ir.Size(), comps, lh); |
| 240 | cf->Evaluate(mir, values); |
| 241 | edge_data.Append( |
| 242 | FlatArray<double>(values.AsVector().Size(), values.Data())); |
| 243 | } |
| 244 | auto nip = order+1; |
| 245 | auto nseg = edge_data.Size() / nip / comps; |
| 246 | FlatTensor<3, double> data(nseg, nip, comps, edge_data.Data()); |
| 247 | return MapBernstein(data, ET_SEGM, order, cf->Dimension()); |
| 248 | } |
| 249 | |
| 250 | vector<string> GenerateSurfaceData( shared_ptr<MeshAccess> ma, |
| 251 | shared_ptr<CoefficientFunction> cf, |
no test coverage detected