f00f61e | Radu Serban | 16 June 2017, 05:17:01 UTC | Update demo to reflect Chrono API changes | 16 June 2017, 05:17:01 UTC |
222c0de | Radu Serban | 16 June 2017, 04:54:23 UTC | Merge branch 'develop' into feature/ogre | 16 June 2017, 04:54:23 UTC |
5692e61 | Milad Rakhsha | 16 June 2017, 04:29:45 UTC | Clang-format on ChSystemFSI.cpp | 16 June 2017, 04:29:45 UTC |
c420beb | Milad Rakhsha | 16 June 2017, 04:25:44 UTC | Added documentation to the ChCollisionSystemFSI and some clang formatings | 16 June 2017, 04:25:44 UTC |
8768beb | Charles Ricchio | 16 June 2017, 03:08:43 UTC | Using tiny obj loader still causes an issue, but the error comes from visual studio's standard library. The exact call that fails is at line 716 of tiny_obj_loader.cc in the third party folder. | 16 June 2017, 03:08:43 UTC |
44fc406 | Radu Serban | 15 June 2017, 08:59:39 UTC | Fix typos in comments (Chrono::Vehicle) | 15 June 2017, 08:59:39 UTC |
8bf692a | Radu Serban | 15 June 2017, 08:34:06 UTC | Add doxygen API documentation for the vehicle models library | 15 June 2017, 08:34:06 UTC |
a35ce6c | Radu Serban | 15 June 2017, 05:52:46 UTC | Clean up doxygen grouping in Chrono::Vehicle | 15 June 2017, 05:52:46 UTC |
075cd1e | Milad Rakhsha | 15 June 2017, 04:15:11 UTC | Added to Chrono::FSI documentations… | 15 June 2017, 04:15:11 UTC |
bfcd37b | DarioMangoni | 14 June 2017, 23:50:11 UTC | Fix 'ptrdiff_t' error in GCC | 14 June 2017, 23:51:35 UTC |
3341746 | DarioMangoni | 14 June 2017, 16:21:23 UTC | Fix Doxygen documentation and Chrono header in Chrono module | 14 June 2017, 23:16:17 UTC |
0e36509 | Radu Serban | 14 June 2017, 15:50:45 UTC | Fixes for some doxygen warnings | 14 June 2017, 15:50:45 UTC |
9c421c3 | Radu Serban | 14 June 2017, 15:01:04 UTC | Enable verbose output for one of the Travis builds | 14 June 2017, 15:01:04 UTC |
1faa38d | Radu Serban | 14 June 2017, 15:00:32 UTC | Fix doxygen documentation for Chrono::OpenGL | 14 June 2017, 15:00:32 UTC |
872a10d | DarioMangoni | 14 June 2017, 13:46:26 UTC | Fix misleading assert in ChCSMatrix | 14 June 2017, 13:46:26 UTC |
f4fe9e9 | Radu Serban | 14 June 2017, 12:35:00 UTC | Include missing header | 14 June 2017, 12:35:00 UTC |
adc6098 | DarioMangoni | 13 June 2017, 17:32:02 UTC | Expanded documentation of sparse matrices and renaming... - ChCSR3Matrix to ChCSMatrix since it supports both CSR and CSC - GetCSR_xxx methods changed to GetCS_xxx - minor renaming of ChSparsityPatternLearner - fixed misleading name of ConvertMatrixType | 14 June 2017, 11:45:57 UTC |
5aa7744 | DarioMangoni | 13 June 2017, 17:22:50 UTC | Fix bug in assembling CSR matrix in MKL solver | 14 June 2017, 11:45:42 UTC |
59b6bd0 | DarioMangoni | 13 June 2017, 16:49:00 UTC | Add MKL installation guide | 14 June 2017, 11:31:29 UTC |
c0366ee | DarioMangoni | 13 June 2017, 16:47:49 UTC | MKL solver: sparsity pattern lock activate by default | 14 June 2017, 11:31:29 UTC |
ded9a3d | Radu Serban | 14 June 2017, 07:22:04 UTC | Add name identifier for a vehicle system | 14 June 2017, 07:22:04 UTC |
3a5b50c | Milad Rakhsha | 14 June 2017, 05:09:30 UTC | Added to the documentation of the Chrono::FSI. WIP | 14 June 2017, 05:09:30 UTC |
dc2331c | Radu Serban | 13 June 2017, 16:58:19 UTC | Expand Chrono::Parallel doxygen documentation | 13 June 2017, 16:58:19 UTC |
3144503 | Radu Serban | 13 June 2017, 14:45:34 UTC | Remove obsolete files | 13 June 2017, 14:45:34 UTC |
8b62274 | Radu Serban | 13 June 2017, 13:19:49 UTC | Fix arguments for ChMarker constructor | 13 June 2017, 13:19:49 UTC |
17a2612 | Radu Serban | 13 June 2017, 13:19:22 UTC | Fix name of chassis body | 13 June 2017, 13:19:22 UTC |
6abb1e3 | Radu Serban | 13 June 2017, 13:19:00 UTC | Fix comments | 13 June 2017, 13:19:00 UTC |
a08abf8 | Radu Serban | 12 June 2017, 10:46:04 UTC | Ensure all base classes for vehicle subsystem templates have a virtual destructor | 12 June 2017, 10:46:04 UTC |
50d8fb5 | DarioMangoni | 12 June 2017, 09:13:39 UTC | Fix demo_FEA_abaqus_wheel with MKL | 12 June 2017, 09:13:39 UTC |
478f02f | Colin Vanden Heuvel | 09 March 2017, 00:23:34 UTC | Adds missing thirdparty license | 12 June 2017, 06:10:41 UTC |
0fb623e | Radu Serban | 09 June 2017, 09:29:03 UTC | Add doxygen module information to Chrono::FSI | 09 June 2017, 09:29:03 UTC |
fe62305 | Radu Serban | 09 June 2017, 09:28:31 UTC | Process CUDA headers (*.cuh) with Doxygen | 09 June 2017, 09:28:31 UTC |
8fa9d05 | Radu Serban | 06 June 2017, 09:01:41 UTC | Update project configuration script to properly deal with the Chrono::Matlab module | 06 June 2017, 09:01:41 UTC |
2dc48df | Alessandro Tasora | 04 June 2017, 16:22:20 UTC | Mention SMC and NSC in ChSystem autodocs. | 04 June 2017, 16:22:20 UTC |
e3d5d82 | Alessandro Tasora | 04 June 2017, 16:18:40 UTC | Update the manual section on ChSystem, to explain ChSystemNSC and ChSystemSMC | 04 June 2017, 16:18:40 UTC |
2cabd36 | Alessandro Tasora | 04 June 2017, 11:51:22 UTC | Merge branch 'develop' of https://github.com/projectchrono/chrono into develop | 04 June 2017, 11:51:22 UTC |
bf74217 | Alessandro Tasora | 04 June 2017, 11:51:09 UTC | Update doc of python tutorial | 04 June 2017, 11:51:09 UTC |
c7003b8 | Radu Serban | 03 June 2017, 15:06:00 UTC | Rename Chrono::Parallel demo | 03 June 2017, 15:06:00 UTC |
f1cafa7 | Radu Serban | 03 June 2017, 09:15:53 UTC | Clean up PARALLEL demos: - enable wireframe visualization at start-up - adjust camera location - apply code formatting | 03 June 2017, 09:15:53 UTC |
ca48b0a | Radu Serban | 03 June 2017, 09:14:47 UTC | Clean up FEA demos: - split demo_FEA_beamsconstr into two separate demos: demo_FEA_beams_constr and demo_FEA_beams_static - remove demo_FEA_abaqus_wheel4 and demo_FEA_miniature - add standard Chrono file header - apply code formatting | 03 June 2017, 09:14:47 UTC |
b24b2ba | Radu Serban | 02 June 2017, 17:33:42 UTC | Instrument Chrono::Parallel headers for Doxygen API documentation (no functional changes) | 02 June 2017, 17:33:42 UTC |
da4e304 | Radu Serban | 02 June 2017, 13:47:14 UTC | Use material composition strategy in Chrono. - Maintain a (unique) pointer to a material composition strategy object in ChSystem - Provide mechanism to specify a custom strategy through Chsystem::SetMaterialCompositionStrategy() - Use the current strategy in creating composite materials for all interactions (both NSC and SMC) | 02 June 2017, 13:47:14 UTC |
d8a8377 | Radu Serban | 02 June 2017, 12:14:09 UTC | Change mechanism for adding a Ch3DOFContainer to a parallel NSC system. - for consistency, use ChSystemParallelNSC::Add3DOFContainer to attach a particle container to a system - 3DOF containers are constructed outside of a system and then added to the system - maintain shared pointers to 3DOF containers in the data manager | 02 June 2017, 12:14:09 UTC |
49de7b2 | Radu Serban | 02 June 2017, 09:47:40 UTC | Rename Ch3DOFRigidContainer to ChParticleContainer. - particles are rigid bodies with only 3 degrees of freedom (translation only; no rotation) - particles in a container have associated contact shapes (spheres of same radius) | 02 June 2017, 09:47:40 UTC |
94c7aec | Radu Serban | 02 June 2017, 09:46:14 UTC | Rename dem_coeffs to smc_coeffs | 02 June 2017, 09:46:14 UTC |
ee06332 | Radu Serban | 02 June 2017, 08:16:35 UTC | Remove unnecessary (redundant) code | 02 June 2017, 08:16:35 UTC |
3469d02 | Radu Serban | 02 June 2017, 08:00:29 UTC | Remove dead code | 02 June 2017, 08:00:29 UTC |
bd3ca44 | Radu Serban | 02 June 2017, 07:56:38 UTC | Clean up constructors of Ch3DOFContainer and derived classes | 02 June 2017, 07:56:38 UTC |
79a4b3e | Radu Serban | 02 June 2017, 07:41:32 UTC | Remove code duplication (NSC cone projection). - use the free functions defined in ChConstraintUtils throughout - no need to test return value (indicating whether or not the provided impulse was outside the friction cone and the polar cone) | 02 June 2017, 07:41:32 UTC |
2cebe05 | Radu Serban | 02 June 2017, 07:27:27 UTC | Use material composition strategy in Chrono::Parallel. - Maintain a (unique) pointer to a material composition strategy object in data_manager - Provide mechanism to specify a custom strategy through the ChsystemParallel - Use the current strategy in creating composite materials for all interactions (both NSC and SMC) in Chrono::Parallel | 02 June 2017, 07:27:27 UTC |
11e50d2 | Radu Serban | 02 June 2017, 07:21:28 UTC | Add base class for contact material composition strategy. - This base class implements the default combination laws for obtaining properties of interacting pairs (coefficient of friction, cohesion, etc.) - Contact processing (whether NSC or SMC) should use this mechanism for generating a ChMaterialComposite - A particular system can provide a mechanism for accepting custom strategies | 02 June 2017, 07:21:28 UTC |
f698769 | Radu Serban | 02 June 2017, 06:20:19 UTC | Rearrange calculations in projection for rolling resistance constraints | 02 June 2017, 06:20:19 UTC |
a9123b4 | Radu Serban | 02 June 2017, 06:18:19 UTC | Add accessor to get number of particles in a Ch3DOFContainer | 02 June 2017, 06:18:19 UTC |
372f9d2 | Radu Serban | 02 June 2017, 06:17:24 UTC | Fix real3 default constructor. - To prevent use of uninitialized variables, always set the 4th component to 0. | 02 June 2017, 06:17:24 UTC |
d946e95 | DarioMangoni | 29 May 2017, 15:08:20 UTC | Update FindMKL to look in default Intel install directory It should work seamlessly with all the versions of Parallel Studio | 29 May 2017, 15:08:20 UTC |
2520c6a | Radu Serban | 28 May 2017, 14:53:23 UTC | Update the sample external project to reflect latest Chrono API changes | 28 May 2017, 14:53:23 UTC |
8fd3cb2 | Radu Serban | 27 May 2017, 14:23:03 UTC | Change suspension type on rear of articulated vehicle | 27 May 2017, 14:23:03 UTC |
4c72fda | Radu Serban | 27 May 2017, 14:22:31 UTC | Remove obsolete files | 27 May 2017, 14:22:31 UTC |
d346ef1 | Radu Serban | 27 May 2017, 14:22:09 UTC | Clean up comments | 27 May 2017, 14:22:09 UTC |
ddf44a0 | Radu Serban | 27 May 2017, 14:21:42 UTC | Add new type of wheeled vehicle suspension (rigid axle pinned to chassis) | 27 May 2017, 14:21:42 UTC |
3a9426a | Radu Serban | 25 May 2017, 08:52:05 UTC | Add more possible suspension types in a test rig | 25 May 2017, 08:52:05 UTC |
370b031 | Radu Serban | 25 May 2017, 08:47:24 UTC | Add option to construct a suspension test rig from an existing vehicle - the source vehicle must be initialized - the test rig is constructed based on the specified vehicle axle index | 25 May 2017, 08:47:24 UTC |
083cbec | Radu Serban | 25 May 2017, 08:34:32 UTC | Cache location relative to chassis and index of associated steering (if any) for suspension subsystems. - Note: API change (signature of ChSuspension::Initialize) - pass steering_index=-1 for a non-steered suspension | 25 May 2017, 08:34:32 UTC |
db6b368 | Radu Serban | 25 May 2017, 08:30:05 UTC | Cache position (location & orientation) of a steering mechanism relative to chassis | 25 May 2017, 08:30:05 UTC |
19c1e55 | DarioMangoni | 24 May 2017, 16:33:19 UTC | Fix bug in ChElementTetra_10::ComputeNF as reported in forum "Problems with FEA quadratic tetrahedron elements" | 24 May 2017, 16:33:19 UTC |
54fc723 | Radu Serban | 24 May 2017, 14:57:15 UTC | Declare as virtual some ChSystemParallel functions | 24 May 2017, 14:57:15 UTC |
e8271e5 | Radu Serban | 24 May 2017, 14:56:01 UTC | Add ChBody member to hold an identifier for global indexing (internal use only) | 24 May 2017, 14:56:01 UTC |
582a7fb | Radu Serban | 24 May 2017, 14:01:40 UTC | Add accessors for the spring and shock suspension elements | 24 May 2017, 14:01:40 UTC |
426fb27 | Radu Serban | 24 May 2017, 12:51:38 UTC | Pass a back-pointer to the associated link in ChLinkSprinCB and ChLinkRotSpringCB functors | 24 May 2017, 12:51:38 UTC |
ac8a8ba | Radu Serban | 23 May 2017, 16:15:04 UTC | Add option to specify ChPitmanArm body inertia matrices in a vehicle-aligned centroidal frame. - Add support for specifying full inertia tensor for ChPitmanArm steering bodies (steering link and arm). - Inertia matrices for the steering link and the arm can be provided either in the body centroidal frame (default) or else in a centroidal frame aligned with the vehicle reference frame - The latter option can be specified through an optional constructor argument (default: false) - For a Pitman arm steering specified through a JSON file, the default can be changed by setting the key "Vehicle-Frame Inertia" to "true" - If a JSON specification file does not contain the above key/value pair, the inertia matrices are assumed to be in the body centroidal frame - Update all existing concrete classes and JSON model files to specify (0,0,0) products of inertia (backward compatible) | 23 May 2017, 16:15:04 UTC |
e1840d5 | Radu Serban | 23 May 2017, 13:54:08 UTC | Add option to specify ChDoubleWishbone body inertia matrices in a vehicle-aligned centroidal frame. - Inertia matrices for the upright and the lower and upper control arms can be provided either in the body centroidal frame (default) or else in a centroidal frame aligned with the vehicle reference frame - The latter option can be specified through an optional constructor argument (default: false) - For a double wishbone suspension specified through a JSON file, the default can be changed by setting the key "Vehicle-Frame Inertia" to "true" - If a JSON specification file does not contain the above key/value pair, the inertia matrices are assumed to be in the body centroidal frame | 23 May 2017, 13:54:08 UTC |
04b07d6 | Radu Serban | 23 May 2017, 12:43:44 UTC | Add Chrono::Vehicle utility function for transforming inertia matrix. This function converts an inertia matrix specified in a vehicle-aligned centroidal frame to the body centroidal frame | 23 May 2017, 12:43:44 UTC |
508e6b7 | Radu Serban | 23 May 2017, 12:41:58 UTC | Add ChMatrix33 constructor from 2 vectors. This constructs a symmetric 3x3 matrix with the specified vectors as diagonal and off-diagonal elements. | 23 May 2017, 12:41:58 UTC |
5f84e1c | Radu Serban | 23 May 2017, 12:20:44 UTC | Fix comments | 23 May 2017, 12:20:44 UTC |
b14b049 | Radu Serban | 23 May 2017, 12:20:13 UTC | Add support for specifying full inertia tensor on ChDoubleWishbone suspension bodies. - this includes the upright, lower control arm, upper control arm - only moments of inertia are required for the spindle body (which is assumed to be defined w.r.t. principal axes) - update all existing concrete classes and JSON model files to specify (0,0,0) products of inertia (backward compatible) | 23 May 2017, 12:20:13 UTC |
42e1a0a | Radu Serban | 23 May 2017, 05:10:17 UTC | Fix logic for deactivating bodies (associated shapes) from collision detection in Chrono::Parallel - this allows contact shapes to be ignored during collision detection by tagging their associated bodies - this is done by setting the (internal) body id to UINT_MAX (cannot be a negative number, as this id is an unsigned int) - shapes associated with such bodies are excluded from the broadphase collision phase | 23 May 2017, 05:10:17 UTC |
f72f601 | DarioMangoni | 18 May 2017, 12:03:13 UTC | Add missing methods to ChIrrAppInterface - SetPlotAABB(bool val) - SetPlotCOGFrames(bool val) - SetPlotLinkFrames(bool val) - SetPlotConvergence(bool val) | 22 May 2017, 10:57:15 UTC |
f374151 | Radu Serban | 21 May 2017, 11:51:35 UTC | Add demo for a vehicle with an articulated chassis. - Implemented using two utility classes to model the articulated front and rear sides of the split chasis - Articulated_Front is a ChWheeledVehicle with a single (rigid) suspension - Articluated_Rear is a base class, similar in structure to a ChWheeledVehicle; it has a single (rigid) suspension - Front/rear connection is modeled with a revolute joint whose relative angle is controlled based on the steering input - Currently, only the front wheels (associated with the front side) can be driven | 21 May 2017, 11:51:35 UTC |
331af8a | Radu Serban | 21 May 2017, 11:47:03 UTC | Add first draft of simple rigid suspension. - Currently, this is simply a spindle connected to the chassis through a revolute joint. - Add concrete class Generic_RigidSuspension | 21 May 2017, 11:47:03 UTC |
9f1b87b | DarioMangoni | 16 May 2017, 13:38:22 UTC | Fix ChronoConfig.cmake for cosimulation module | 16 May 2017, 13:38:22 UTC |
00e5309 | Alessandro Tasora | 12 May 2017, 17:21:31 UTC | Merge branch 'develop' of https://github.com/projectchrono/chrono into develop | 12 May 2017, 17:21:31 UTC |
8a42450 | Alessandro Tasora | 12 May 2017, 17:21:16 UTC | The Jacobian computation was missing in the contact triangle object, because never needed until nowadays. Jacobian will be used now to do FEA contacts via NSC. Therefore: jacobian computation added and completed. | 12 May 2017, 17:21:16 UTC |
f10de84 | Alessandro Tasora | 12 May 2017, 17:19:55 UTC | Add dispatch code to handle NSC contacts even between triangles and or point clouds (i.e. cases of 3+3+3 dofs vs 3+3+3dofs, or 3+3+3 vs 6 dofs, etc). Note: triangles are needed when doing collisions between FEA meshes, but never used until today because there was no NSC solver that could handle also FEA stiffness matrices, but since we are testing an interior point that can do this, now we are going to test also FEA contacts with NSC; hence the need for NSC concact container to handle all type of pairs like the SMC counterpart. | 12 May 2017, 17:19:55 UTC |
aaf24a3 | Radu Serban | 12 May 2017, 10:14:08 UTC | Rename demo from "Articulated-Vehicle" to "Tractor-Trailer" | 12 May 2017, 10:14:08 UTC |
b58d6d0 | Radu Serban | 10 May 2017, 14:27:15 UTC | Add support for reporting contacts in a Chrono::Parallel system. - implement ChContactContainerParallel::ReportAllContacts which invokes a user-provided callback - currently, only geometric information is available (i.e., no contact force/torque) | 10 May 2017, 14:27:15 UTC |
bba7bc5 | Alessandro Tasora | 06 May 2017, 16:48:01 UTC | Merge branch 'develop' of https://github.com/projectchrono/chrono into develop | 06 May 2017, 16:48:01 UTC |
5fee6dd | Alessandro Tasora | 06 May 2017, 16:47:52 UTC | Test new bushings | 06 May 2017, 16:47:52 UTC |
f896c8e | Alessandro Tasora | 06 May 2017, 16:46:17 UTC | Feature: for POVray output, optionally write assets inside each pov script at each timestep, instead of default appending to a huge asset file that is shared among all steps. The former causes larger files at each timestep, but should be used if asset properties (ex color) change during time. | 06 May 2017, 16:46:17 UTC |
e3be7de | Radu Serban | 03 May 2017, 08:48:13 UTC | Merge branch 'feature/contact_method' into develop | 03 May 2017, 08:48:13 UTC |
041d616 | Radu Serban | 03 May 2017, 08:23:46 UTC | Rename Chrono::Vehicle methods for accessing force and torque functor objects | 03 May 2017, 08:23:46 UTC |
c1c2ed5 | Radu Serban | 03 May 2017, 08:14:25 UTC | Refactor ChLinkRotSpringCB: - rename torque evaluation callback as a "functor"; i.e., chrono::ChLinkRotSpringCB::TorqueFunctor replaces chrono::ChRotSpringTorqueCallback - nest TorqueFunctor under ChLinkRotSpringCB - use ChLinkRotSpringCB::RegisterTorqueFunctor() to specify the functor object - rename other methods of ChLinkRotSpringCB, for example ChLinkRotSpringCB::Get_RotSpringAngle() -> ChLinkRotSpringCB::GetRotSpringAngle() | 03 May 2017, 08:14:25 UTC |
b6e67e5 | Radu Serban | 03 May 2017, 07:36:45 UTC | Refactor ChLinkSpringCB: - rename force evaluation callback as a "functor"; i.e., chrono::ChLinkSpringCB::ForceFunctor replaces chrono::ChSpringForceCallback - nest ForceFunctor under ChLinkSpringCB - use ChLinkSpringCB::RegisterForceFunctor() to specify the functor object - rename other methods of ChLinkSpringCB, for example ChLinkSpringCB::Get_SpringLength() -> ChLinkSpringCB::GetSpringLength() | 03 May 2017, 07:36:45 UTC |
dfb7993 | Radu Serban | 03 May 2017, 06:37:54 UTC | Refactor callback classes related to particle generation for consistency: - all callback base classes are nested under an appropriate Chrono class (chrono::utils::MixtureIngredient and chrono::particlefactory::ChRandomShapeCreator) - callback classes do not have the 'Ch' prefix - a callback base class FooCallback has a pure virtual method with name 'OnFoo' - use methods named 'RegisterFooCallback' to specify a callback object of type FooCallback - ensure that all callback base classes define a virtual destructor | 03 May 2017, 06:37:54 UTC |
9a2f6eb | Radu Serban | 02 May 2017, 18:48:04 UTC | Rename classes to ChMaterialSurface, ChContactContainer, and ChProximityContainer | 02 May 2017, 18:48:04 UTC |
4b44d3a | Radu Serban | 02 May 2017, 17:53:00 UTC | Workaround for a SWIG issue where references are replaced with pointers. This is a hack. Is there a better solution? | 02 May 2017, 17:53:00 UTC |
05a5c30 | Radu Serban | 02 May 2017, 15:08:18 UTC | Fix issue with nested callback class in Chrono::Python for reporting contacts and proximities | 02 May 2017, 15:08:18 UTC |
01b9f93 | Radu Serban | 02 May 2017, 11:59:18 UTC | Update Chrono::Cascade demos to use ChSystemNSC | 02 May 2017, 11:59:18 UTC |
12d63da | Radu Serban | 02 May 2017, 10:03:34 UTC | Update Chrono::Python to reflect API changes: - refactor SWIG interface files - eliminate ChMaterialCouple.i and add ChSystemNSC.i - update python demos | 02 May 2017, 10:03:34 UTC |
aeb3383 | Radu Serban | 01 May 2017, 07:54:53 UTC | Fix bug related to dependent names in template classes | 01 May 2017, 07:54:53 UTC |
f2fd32c | Radu Serban | 01 May 2017, 06:10:38 UTC | Clean up collision-related callback classes for consistency: - callback base classes are nested under ChCollisionSystem and do not have the 'Ch' prefix - a callback base class FooCallback has a pure virtual method with name 'OnFoo' - use methods named 'RegisterFooCallback' to specify a callback object of type FooCallback | 01 May 2017, 06:10:38 UTC |