refactor ShapeFunction interface, use MFNode list as main input