00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <stdio.h>
00025
00026 #include "GeometryBond.h"
00027 #include "MoleculeList.h"
00028 #include "Molecule.h"
00029 #include "utilities.h"
00030
00031
00033 GeometryBond::GeometryBond(int *m, int *a, const int *cell, MoleculeList *mlist,
00034 CommandQueue *cq, Displayable *d)
00035 : GeometryMol(2, m, a, cell, mlist, cq, d) { }
00036
00037
00038 float GeometryBond::calculate(void) {
00039
00040
00041 float pos1[3], pos2[3];
00042 if(!normal_atom_coord(0, pos1))
00043 return 0.0;
00044 if(!normal_atom_coord(1, pos2))
00045 return 0.0;
00046
00047 vec_sub(pos2, pos2, pos1);
00048 return(geomValue = norm(pos2));
00049 }
00050
00051
00052
00053 void GeometryBond::create_cmd_list() {
00054 char valbuf[32];
00055
00056
00057 float pos1[3], pos2[3];
00058
00059 reset_disp_list();
00060 if(!transformed_atom_coord(0, pos1))
00061 return;
00062 if(!transformed_atom_coord(1, pos2))
00063 return;
00064
00065 append(DMATERIALOFF);
00066 DispCmdColorIndex cmdColor;
00067 cmdColor.putdata(my_color, cmdList);
00068
00069 DispCmdLineType cmdLineType;
00070 DispCmdLineWidth cmdLineWidth;
00071 cmdLineType.putdata(DASHEDLINE, cmdList);
00072 cmdLineWidth.putdata(4, cmdList);
00073
00074
00075 midpoint(valuePos, pos1, pos2);
00076
00077
00078
00079 valuePos[0] += 0.05f;
00080 sprintf(valbuf, "%-7.2f", geomValue);
00081 display_string(valbuf, cmdList);
00082
00083
00084 display_line(pos1, pos2, cmdList);
00085
00086 }
00087
00088 void GeometryBond::set_pick(void) {
00089
00090
00091 if(objIndex[0] == objIndex[1]) {
00092 set_pick_selection(objIndex[0], 2, comIndex);
00093 } else {
00094 set_pick_selection();
00095 }
00096 set_pick_value(geomValue);
00097 }
00098