#include "use.h" #include "assetFactory.h" #include #include #include #include #include Shape::CreatedFaces Use::createMesh(ModelFactoryMesh & mesh, Scale3D levelOfDetailFactor) const { auto apply = [&mesh](const auto & faces, const Mutation::Matrix & m) { std::set vs; for (const auto & f : faces) { const auto fvr = mesh.fv_range(f.second); for (const auto & v : fvr) { if (!vs.contains(v)) { perspectiveApply(mesh.point(v), m); vs.insert(v); } } } }; auto faces = type->createMesh(mesh, levelOfDetailFactor * scale); applyStyle(mesh, {this}, faces); apply(faces, getDeformationMatrix()); for (const auto & [name, faceController] : faceControllers) { faceController->apply(mesh, {this}, name, faces); } apply(faces, getLocationMatrix()); return faces; } struct Lookup : public Persistence::SelectionV { using Persistence::SelectionV::SelectionV; using Persistence::SelectionV::setValue; void setValue(std::string && str) override { if (auto mf = Persistence::ParseBase::getShared("assetFactory")) { v = mf->shapes.at(str); } } }; bool Use::persist(Persistence::PersistenceStore & store) { return STORE_TYPE && STORE_HELPER(type, Lookup) && Mutation::persist(store) && Style::persist(store) && STORE_NAME_HELPER("face", faceControllers, Persistence::MapByMember); }