// Set visibility of grid data bool Commands::function_GridVisible(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; if (c->hasArg(0)) obj.g->setVisible(c->argb(0)); rv.set(obj.g->isVisible()); return true; }
// Add next gridpoint in sequence bool Commands::function_AddNextGridPoint(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; obj.g->setNextData(c->argd(0)); rv.reset(); return true; }
// Set whether 2D grid uses data value as height component bool Commands::function_GridUseZ(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; if (c->hasArg(0)) obj.g->setUseDataForZ(c->argb(0)); rv.set(obj.g->useDataForZ()); return true; }
// Set view percentage for secondary surface bool Commands::function_GridViewPercentageSecondary(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; if (c->hasArg(0)) obj.g->setSecondaryCutoffAsViewPercentage(c->argd(0), c->hasArg(1) ? c->argb(1) : false); rv.set((obj.g->partialSecondarySum() / obj.g->totalAbsoluteSum())*100.0); return true; }
// Set whether grid is periodic bool Commands::function_GridPeriodic(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; obj.g->setPeriodic(c->argb(0)); rv.reset(); return true; }
// Set secondary grid cutoff bool Commands::function_GridCutoffSecondary(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; obj.g->setLowerSecondaryCutoff(c->argd(0)); if (c->hasArg(1)) obj.g->setUpperSecondaryCutoff(c->argd(1)); rv.reset(); return true; }
// Set negative colour for grid bool Commands::function_GridColourSecondary(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; if (c->hasArg(3)) obj.g->setSecondaryColour(c->argd(0), c->argd(1), c->argd(2), c->argd(3)); else obj.g->setSecondaryColour(c->argd(0), c->argd(1), c->argd(2)); rv.reset(); return true; }
// Set transparency of primary and secondary grid surfaces bool Commands::function_GridAlpha(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; obj.g->setPrimaryAlpha(c->argGLf(0)); obj.g->setSecondaryAlpha(c->argGLf(0)); rv.reset(); return true; }
// Clears charge in current model ('clearcharges') bool Commands::function_ClearCharges(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; obj.rs()->beginUndoState("Remove charges"); obj.rs()->clearCharges(); obj.rs()->endUndoState(); return true; }
// Assign charge to a pattern atom, propagated over the model ('chargepatom <id> <q>') bool Commands::function_ChargePAtom(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; obj.rs()->beginUndoState("Charge single pattern atom"); obj.rs()->chargePatternAtom(obj.p,c->argi(0),c->argd(1)); obj.rs()->endUndoState(); return true; }
// Assign charges from forcefield atom types ('chargeff') bool Commands::function_ChargeFF(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; obj.rs()->beginUndoState("Assign forcefield charges"); bool result = obj.rs()->assignForcefieldCharges(); obj.rs()->endUndoState(); return (result); }
// Add grid point data at specified indices bool Commands::function_AddGridPoint(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; Vec3<int> veci = c->arg3i(0); obj.g->setData(veci.x-1, veci.y-1, veci.z-1, c->argd(3)); rv.reset(); return true; }
// Create new grid in the current model bool Commands::function_NewGrid(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; obj.g = aten_.currentModel()->addGrid(); obj.g->setName(c->argc(0).trimmed()); rv.set(VTypes::GridData, obj.g); return true; }
// Initialise grid, setting extent of grid (number of points in each direction) bool Commands::function_InitialiseGrid(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; Grid::GridType gt = Grid::gridType(c->argc(0), true); if (gt == Grid::nGridTypes) return false; rv.set(obj.g->initialise(gt, c->arg3i(1))); return true; }
// Set drawing style of secondary surface bool Commands::function_GridStyleSecondary(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; Grid::SurfaceStyle ss = Grid::surfaceStyle(c->argc(0)); if (ss == Grid::nSurfaceStyles) return false; obj.g->setSecondaryStyle(ss); rv.reset(); return true; }
ATEN_USING_NAMESPACE // Add free grid point data at specified coordinates bool Commands::function_AddFreePoint(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; obj.g->addFreePoint(c->argd(0), c->argd(1), c->argd(2), c->argd(3)); rv.reset(); return true; }
// Copy atomic charges from model to model's current trajectory frame bool Commands::function_ChargeFromModel(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; if (obj.rs() == obj.m) { Messenger::print("Error - 'chargefrommodel' requires an active trajectory frame in the current model."); return false; } else obj.rs()->copyAtomData(obj.m, Atom::ChargeData); return true; }
// Set grid axes (nine doubles) bool Commands::function_GridAxes(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; Matrix mat; mat.setColumn(0, c->arg3d(0), 0.0); mat.setColumn(1, c->arg3d(3), 0.0); mat.setColumn(2, c->arg3d(6), 0.0); obj.g->setAxes(mat); rv.reset(); return true; }
// Load grid ('loadgrid <filename>') bool Commands::function_LoadGrid(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; Grid* g = NULL; if (aten_.importGrid(obj.rs(), c->argc(0))) g = obj.g; else return false; // Set return value rv.set(VTypes::GridData, g); return true; }
// Set colour scale for grid bool Commands::function_GridColourscale(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; int cs = c->argi(0); if ((cs < 0) || (cs > 10)) { Messenger::print("ColourScale %i is out of range (1-10, or 0 to use object's internal colour).",cs); return false; } obj.g->setColourScale(cs-1); rv.reset(); return true; }
// Set loop order to use in 'gridnextpoint' bool Commands::function_GridLoopOrder(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::GridPointer)) return false; if (c->argc(0).length() != 3) { Messenger::print("A string of three characters must be passed to 'gridLoopOrder' (got '%s').", qPrintable(c->argc(0))); return false; } obj.g->setLoopOrder(c->argc(0)); rv.reset(); return true; }
// Return nth grid of model bool Commands::function_GetGrid(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; Grid* g = NULL; switch (c->argType(0)) { case (VTypes::IntegerData): g = obj.rs()->grid(c->argi(0)-1); break; case (VTypes::GridData): g = (Grid*) c->argp(0, VTypes::GridData); break; default: Messenger::print("Can't convert a variable of type '%s' to a Grid.", VTypes::dataType(c->argType(0))); break; } if (g == NULL) return false; rv.set(VTypes::GridData, g); return true; }
ATEN_USING_NAMESPACE // Assign charge to selected atoms in model ('charge <q>'), or get charge of current selection bool Commands::function_Charge(CommandNode* c, Bundle& obj, ReturnValue& rv) { if (obj.notifyNull(Bundle::ModelPointer)) return false; double q = 0.0; if (c->hasArg(0)) { obj.rs()->beginUndoState("Charge selected atoms"); for (RefListItem<Atom,int>* ri = obj.rs()->selection(); ri != NULL; ri = ri->next) obj.rs()->atomSetCharge(ri->item, c->argd(0)); obj.rs()->endUndoState(); } else { q = 0.0; for (RefListItem<Atom,int>* ri = obj.rs()->selection(); ri != NULL; ri = ri->next) q += ri->item->charge(); } rv.set(q); return true; }