コード例 #1
0
ファイル: py_imd.C プロジェクト: gzoppetti/ExscitechVmd
// connect(host, port)
static PyObject *imdconnect(PyObject *self, PyObject *args, PyObject *keywds) {
  
  char *host;
  int port;

  static char *kwlist[] = {
    (char *)"host", (char *)"port", NULL
  };

  if (!PyArg_ParseTupleAndKeywords(args, keywds, (char *)"si", kwlist, &host, &port))
    return NULL;

  VMDApp *app = get_vmdapp();
  Molecule *mol = app->moleculeList->top();
  if (!mol) {
    PyErr_SetString(PyExc_ValueError, (char *)"No molecule loaded");
    return NULL;
  }
  if (app->imdMgr->connected()) {
    PyErr_SetString(PyExc_ValueError, (char *)"Can't create new IMD connection: already connected.");
    return NULL;
  }
  if (!app->imd_connect(mol->id(), host, port)) {
    PyErr_SetString(PyExc_ValueError, (char *)"Unable to connect to IMD server");
    return NULL;
  } 
  Py_INCREF(Py_None);
  return Py_None;
}
コード例 #2
0
ファイル: py_color.C プロジェクト: gzoppetti/ExscitechVmd
static PyObject *set_scale(PyObject *self, PyObject *args, PyObject *keywds) {
  static char *kwlist[] = {
    (char *)"method", (char *)"midpoint", (char *)"min", (char *)"max", NULL
  };

  char *method = NULL;
  float midpoint = -1, min = -1, max = -1;
  VMDApp *app = get_vmdapp();
  app->colorscale_info(&midpoint, &min, &max);
 
  if (!PyArg_ParseTupleAndKeywords(args, keywds, (char *)"|sfff", kwlist,
                                   &method, &midpoint, &min, &max)) 
    return NULL; 

  if (method) {
    int ind = app->colorscale_method_index(method);
    if (ind < 0) { 
      PyErr_SetString(PyExc_ValueError, (char *)"Invalid color scale method");
      return NULL;
    }
    app->colorscale_setmethod(ind);
  }
  app->colorscale_setvalues(midpoint, min, max);  
  Py_INCREF(Py_None);
  return Py_None;
}
コード例 #3
0
ファイル: py_color.C プロジェクト: Eigenstate/vmd-python
static PyObject* py_scale_methods(PyObject *self, PyObject *args)
{

  PyObject *newlist = NULL;
  VMDApp *app;
  int i, num;

  if (!(app = get_vmdapp()))
    return NULL;

  num = app->num_colorscale_methods();
  if (!(newlist = PyList_New(num)))
    goto failure;

  for (i = 0; i < num; i++) {
    PyList_SET_ITEM(newlist, i, as_pystring(app->colorscale_method_name(i)));
    if (PyErr_Occurred())
      goto failure;
  }

  return newlist;

failure:
  PyErr_SetString(PyExc_RuntimeError, "Problem listing colorscales");
  Py_XDECREF(newlist);
  return NULL;
}
コード例 #4
0
void MainFltkMenu::savefile_cb(Fl_Widget *w, void *v) {
  VMDApp *app = (VMDApp *)(w->user_data());
  int selmol = ((MainFltkMenu *) v)->get_selected_molecule();
  app->menu_select_mol("save", selmol);
  app->menu_show("save", 0);
  app->menu_show("save", 1);
}
コード例 #5
0
ファイル: py_color.C プロジェクト: Eigenstate/vmd-python
static PyObject* py_set_colorid(PyObject *self, PyObject *args,
                                PyObject *kwargs)
{
  const char *kwnames[] = {"id", "rgb", NULL};
  float rgb[3];
  int colorid;
  VMDApp *app;

  if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i(fff):color.set_colorid",
                                   (char**) kwnames, &colorid, &rgb[0], &rgb[1],
                                   &rgb[2]))
  	return NULL;

  if (!(app = get_vmdapp()))
    return NULL;

  if (colorid >= app->num_regular_colors() || colorid < 0) {
  	PyErr_Format(PyExc_ValueError, "color index '%d' out of range", colorid);
  	return NULL;
  }

  app->color_change_rgb(app->color_name(colorid), rgb[0], rgb[1], rgb[2]);
  Py_INCREF(Py_None);
  return Py_None;
}
コード例 #6
0
ファイル: py_color.C プロジェクト: Eigenstate/vmd-python
static PyObject* py_set_scale(PyObject *self, PyObject *args, PyObject *kwargs)
{

  const char *kwnames[] = {"method", "midpoint", "min", "max", NULL};
  float midpoint = -1, min = -1, max = -1;
  char *method = NULL;
  VMDApp *app;

  // Set midpoint, min and max to the current values
  if (!(app = get_vmdapp()))
    return NULL;
  app->colorscale_info(&midpoint, &min, &max);

  if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|zfff:color.set_scale",
                                   (char**) kwnames, &method, &midpoint, &min,
                                   &max))
    return NULL;

  if (method) {
    int ind = app->colorscale_method_index(method);
    if (ind < 0) {
      PyErr_SetString(PyExc_ValueError, "Invalid color scale method");
      return NULL;
    }
    app->colorscale_setmethod(ind);
  }
  app->colorscale_setvalues(midpoint, min, max);

  Py_INCREF(Py_None);
  return Py_None;
}
コード例 #7
0
ファイル: py_graphics.C プロジェクト: gzoppetti/ExscitechVmd
// colors: Takes one argument, either a tuple of three floats, a string 
// color name, or an integer color index 
static PyObject *graphics_color(PyObject *self, PyObject *args) {
  int id;
  PyObject *obj;
  int result = -1;
  
  if (!PyArg_ParseTuple(args, (char *)"iO:graphics.color", &id, &obj))
    return NULL;

  MoleculeGraphics *mol = mol_from_id(id);
  if (!mol) 
    return NULL;
  
  if (PyInt_Check(obj)) {
    int index = PyInt_AsLong(obj);
    if (index >= 0 && index < MAXCOLORS) 
      result = mol->use_color(index);

  } else if (PyString_Check(obj)) { 
    char *name = PyString_AsString(obj);
    VMDApp *app = get_vmdapp();
    int index = app->color_index(name);
    if (index >= 0) 
      result = mol->use_color(index);
  }

  if (result >= 0)
    return PyInt_FromLong(result);

  PyErr_SetString(PyExc_ValueError, (char *)"Invalid color");
  return NULL;
}  
コード例 #8
0
ファイル: py_label.C プロジェクト: VictorMion/vmd-cvs-github
// delete(category, labeldict)
// XXX cut 'n paste from show...
static PyObject *label_delete(PyObject *self, PyObject *args) {
  char *type;
  PyObject *labeldict;
  if (!PyArg_ParseTuple(args, (char *)"sO!:label.delete", 
    &type, &PyDict_Type, &labeldict))
    return NULL;

  VMDApp *app = get_vmdapp();
  int cat = app->geometryList->geom_list_index(type);
  if (cat < 0) {
    PyErr_SetString(PyExc_ValueError, (char *)"Unknown label category");
    return NULL;
  }
  GeomListPtr glist = app->geometryList->geom_list(cat);
  int gnum = glist->num();
  for (int i=0; i<gnum; i++) {
    if (dict2geom(labeldict, (*glist)[i])) {
      app->label_delete(type, i); // XXX check return code
      Py_INCREF(Py_None);
      return Py_None;
    }
  }
  PyErr_SetString(PyExc_ValueError, "Invalid labeldict.");
  return NULL;
} 
コード例 #9
0
static void reverse_cb(Fl_Widget *w, void *v) {
  Fl_Button *button = (Fl_Button *)w;
  VMDApp *app = (VMDApp *)v;
  if (button->value())
    app->animation_set_dir(Animation::ANIM_REVERSE);
  else
    app->animation_set_dir(Animation::ANIM_PAUSE);
}
コード例 #10
0
static void forward_cb(Fl_Widget *w, void *v) {
  Fl_Button *button = (Fl_Button *)w;
  VMDApp *app = (VMDApp *)v;
  if (button->value())
    app->animation_set_dir(Animation::ANIM_FORWARD);
  else
    app->animation_set_dir(Animation::ANIM_PAUSE);
}
コード例 #11
0
ファイル: py_label.C プロジェクト: VictorMion/vmd-cvs-github
// add(category, (molids), (atomids))
static PyObject *label_add(PyObject *self, PyObject *args) {
  char *type;
  PyObject *molids, *atomids;
  int i;
  if (!PyArg_ParseTuple(args, (char *)"sO!O!:label.add", 
    &type, &PyTuple_Type, &molids, &PyTuple_Type, &atomids))
    return NULL;

  VMDApp *app = get_vmdapp();
  MoleculeList *mlist = app->moleculeList;
  int cat = app->geometryList->geom_list_index(type);
  if (cat < 0) {
    PyErr_SetString(PyExc_ValueError, (char *)"Unknown label category");
    return NULL;
  }
  int numitems;
  if (PyTuple_Size(molids) == 1 && PyTuple_Size(atomids) == 1)
    numitems = 1;
  else if (PyTuple_Size(molids) == 2 && PyTuple_Size(atomids) == 2)
    numitems = 2; 
  else if (PyTuple_Size(molids) == 3 && PyTuple_Size(atomids) == 3)
    numitems = 3;
  else if (PyTuple_Size(molids) == 4 && PyTuple_Size(atomids) == 4)
    numitems = 4;
  else {
    PyErr_SetString(PyExc_TypeError, (char *)"label.add: 2nd and 3rd arguments"
      " must be tuples of size 1, 2, 3, or 4");
    return NULL;
  }
  int m[4], a[4];
  for (i=0; i<numitems; i++) {
    m[i] = PyInt_AsLong(PyTuple_GET_ITEM(molids, i));
    a[i] = PyInt_AsLong(PyTuple_GET_ITEM(atomids, i));
    if (PyErr_Occurred())
      return NULL;
    Molecule *mol = mlist->mol_from_id(m[i]);
    if (!mol) {
      PyErr_SetString(PyExc_ValueError, (char *)"Invalid molecule id");
      return NULL;
    }
    if (a[i] < 0 || a[i] >= mol->nAtoms) {
      PyErr_SetString(PyExc_ValueError, (char *)"Invalid atom id");
      return NULL;
    }
  } 
  // Add the label, but don't toggle the on/off status.  
  int ind = app->label_add(type, numitems, m, a, NULL, 0.0f, 0);
  if (ind < 0) {
    Py_INCREF(Py_None);
    return Py_None;
  }
  // Get the dict corresponding to this label.  The dict we return
  // corresponds to either the label we just created, or to an existing
  // label whose state we have not changed.  This makes it safe to use
  // label.add to get a proxy to a VMD label.
  GeomListPtr glist = app->geometryList->geom_list(cat);
  return geom2dict((*glist)[ind]);
}
コード例 #12
0
static void curframe_cb(Fl_Widget *w, void *v) {
  Fl_Input *inp = (Fl_Input *)w;
  VMDApp *app = (VMDApp *)v;
  int val = atoi(inp->value());
  int max = app->molecule_numframes(app->molecule_top());
  if (val < 0) val = 0;
  if (val >= max) val = max-1;
  app->animation_set_frame(val);
}
コード例 #13
0
static void stereoswap_cb(Fl_Widget *w, void *v) {
  Fl_Menu_ *m = (Fl_Menu_ *)w;
  VMDApp *app = (VMDApp *)v;
  if (!strcmp("On", m->text())) {
    app->display_set_stereo_swap(1);
  } else {
    app->display_set_stereo_swap(0);
  }
}
コード例 #14
0
static void backgroundmode_cb(Fl_Widget *w, void *v) {
  Fl_Menu_ *m = (Fl_Menu_ *)w;
  VMDApp *app = (VMDApp *)(w->user_data());
  if (!strcmp("Gradient", m->text())) {
    app->display_set_background_mode(1);
  } else {
    app->display_set_background_mode(0);
  }
}
コード例 #15
0
ファイル: py_vmd.C プロジェクト: tmd-gpat/MOLding
static PyObject *py_vmdupdate(PyObject *self, PyObject *args) {
  VMDApp *app = get_vmdapp();
  if (!app) {
    fprintf(stderr, "no app!!\n");
    Py_INCREF(Py_None);
    return Py_None; 
  }
  return Py_BuildValue("i", app->VMDupdate(1));
}
コード例 #16
0
ファイル: py_color.C プロジェクト: gzoppetti/ExscitechVmd
static PyObject *scale_method(PyObject *self, PyObject *args) {
  if (!PyArg_ParseTuple(args, (char *)""))
    return NULL;

  VMDApp *app = get_vmdapp();
  const char *method = 
    app->colorscale_method_name(app->colorscale_method_current());
  return PyString_FromString(method);
}
コード例 #17
0
static void shadowmode_cb(Fl_Widget *w, void *v) {
  const char *mode = ((Fl_Choice *)w)->text();
  VMDApp *app = (VMDApp *)v;
  if (!strcmp(mode, "On")) {
    app->display_set_shadows(1);
  } else {
    app->display_set_shadows(0);
  }
}
コード例 #18
0
ファイル: py_mouse.C プロジェクト: gzoppetti/ExscitechVmd
static PyObject *mousemode(PyObject *self, PyObject *args) {
  int mode, submode = -1;
  if (!PyArg_ParseTuple(args, (char *)"i|i", &mode, &submode)) 
    return NULL;

  VMDApp *app = get_vmdapp();
  app->mouse_set_mode(mode, submode);
  Py_INCREF(Py_None);
  return Py_None;
}
コード例 #19
0
// edit menu callbacks
static void mol_top_cb(Fl_Widget *w, void *v) {
  VMDApp *app = (VMDApp *)w->user_data();
  MolBrowser *browser = (MolBrowser *)v;
  for (int i=0; i<browser->size(); i++) {
    if (browser->selected(i+1)) {
      app->molecule_make_top(app->molecule_id(i));
      break;
    }
  }
}
コード例 #20
0
static void mol_cancel_cb(Fl_Widget *w, void *v) {
  VMDApp *app = (VMDApp *)w->user_data();
  MolBrowser *browser = (MolBrowser *)v;
  for (int i=0; i<browser->size(); i++) {
    if (browser->selected(i+1)) {
      int molid = app->molecule_id(i);
      app->molecule_cancel_io(molid);
    }
  }
}
コード例 #21
0
static PyObject *reverse(PyObject *self, PyObject *args) {
  if (!PyArg_ParseTuple(args, (char *)""))
    return NULL;
  
  VMDApp *app = get_vmdapp();
  app->animation_set_dir(Animation::ANIM_REVERSE);
 
  Py_INCREF(Py_None);
  return Py_None;
}
コード例 #22
0
static PyObject *loop(PyObject *self, PyObject *args) {
  if (!PyArg_ParseTuple(args, (char *)""))
    return NULL;
  
  VMDApp *app = get_vmdapp();
  app->animation_set_style(Animation::ANIM_LOOP);
 
  Py_INCREF(Py_None);
  return Py_None;
}
コード例 #23
0
ファイル: py_render.C プロジェクト: gzoppetti/ExscitechVmd
static PyObject *listall(PyObject *self, PyObject *args) {
  if (!PyArg_ParseTuple(args, (char *)""))
    return NULL;

  PyObject *newlist = PyList_New(0);
  VMDApp *app = get_vmdapp();
  for (int i=0; i<app->filerender_num(); i++)
    PyList_Append(newlist, PyString_FromString(app->filerender_name(i)));
  
  return newlist;
}
コード例 #24
0
ファイル: py_color.C プロジェクト: Eigenstate/vmd-python
static PyObject* py_scale_max(PyObject *self, PyObject *args)
{
  float mid, min, max;
  VMDApp *app;

  if (!(app = get_vmdapp()))
    return NULL;

  app->colorscale_info(&mid, &min, &max);
  return PyFloat_FromDouble(max);
}
コード例 #25
0
ファイル: py_menu.C プロジェクト: gzoppetti/ExscitechVmd
static PyObject *show(PyObject *self, PyObject *args) {
  char *name;
  int onoff;
  if (!PyArg_ParseTuple(args, (char *)"s|i", &name, &onoff))
    return NULL;
  VMDApp *app = get_vmdapp();
  if (PyTuple_GET_SIZE(args) > 1) {
    app->menu_show(name, onoff);
  }
  return Py_BuildValue("i", app->menu_status(name));
}
コード例 #26
0
ファイル: py_label.C プロジェクト: VictorMion/vmd-cvs-github
static PyObject *label_textthickness(PyObject *self, PyObject *args) {
  float newthick = -1;
  if (!PyArg_ParseTuple(args, (char *)"|f:label.textthickness",
        &newthick))
    return NULL;
  VMDApp *app = get_vmdapp();
  if (newthick > 0) {
    app->label_set_text_thickness(newthick);
  }
  return Py_BuildValue("%f", app->label_get_text_thickness());
}
コード例 #27
0
ファイル: py_label.C プロジェクト: VictorMion/vmd-cvs-github
static PyObject *label_textsize(PyObject *self, PyObject *args) {
  float newsize = -1;
  if (!PyArg_ParseTuple(args, (char *)"|f:label.textsize",
        &newsize))
    return NULL;
  VMDApp *app = get_vmdapp();
  if (newsize > 0) {
    app->label_set_text_size(newsize);
  }
  return Py_BuildValue("%f", app->label_get_text_size());
}
コード例 #28
0
static PyObject *skip(PyObject *self, PyObject *args) {
  int value = 0;
  if (!PyArg_ParseTuple(args, (char *)"|i",&value))
    return NULL;
  
  VMDApp *app = get_vmdapp();
  if (value > 0) { 
    app->animation_set_stride(value);
  }
  return PyInt_FromLong(app->anim->skip()); 
}
コード例 #29
0
static PyObject *anim_goto(PyObject *self, PyObject *args) {
  int frame;
  if (!PyArg_ParseTuple(args, (char *)"i", &frame))
    return NULL;
  
  VMDApp *app = get_vmdapp();
  app->animation_set_frame(frame);
 
  Py_INCREF(Py_None);
  return Py_None;
}
コード例 #30
0
ファイル: TclTextInterp.C プロジェクト: Eigenstate/vmd-python
static int text_cmd_quit(ClientData cd, Tcl_Interp *interp, int argc,
                            const char *argv[]) {

  VMDApp *app = (VMDApp *)cd;
  // Trigger exit sequence on next display update.  
  // Avoid calling VMDexit more than once.
  if (!app->exitFlag) app->VMDexit("",0,0);

  // return TCL_ERROR so that execution of procs or sourcing of files
  // stops here as well.
  return TCL_ERROR;
}