source: ThirdParty/mpqc_open/src/bin/molrender/main.cc@ 860145

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_ChronosMutex Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion GeometryObjects Gui_displays_atomic_force_velocity IndependentFragmentGrids_IntegrationTest JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg ThirdParty_MPQC_rebuilt_buildsystem TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes stable
Last change on this file since 860145 was 860145, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '0b990dfaa8c6007a996d030163a25f7f5fc8a7e7' as 'ThirdParty/mpqc_open'

  • Property mode set to 100644
File size: 4.1 KB
Line 
1
2#include <stdio.h>
3#include <util/keyval/keyval.h>
4#include <util/render/render.h>
5#include <util/render/oogl.h>
6#include <util/render/object.h>
7#include <math/isosurf/surf.h>
8#include <chemistry/molecule/molecule.h>
9#include <chemistry/molecule/molrender.h>
10#include <chemistry/molecule/molshape.h>
11
12#include <util/state/linkage.h>
13
14using namespace sc;
15
16int
17main(int argc, char** argv)
18{
19 int i;
20 const char* model = "stick";
21 const char* keyword = "molecule";
22 const char* inputfile = "molrender.in";
23 int level = 3;
24 enum InputType { PDB, KEYVAL } input = KEYVAL;
25 const char* render = 0;
26 int quiet = 0;
27
28 for (i=1; i<argc; i++) {
29 if (!strcmp(argv[i], "-model")) {
30 i++;
31 model = argv[i];
32 }
33 else if (!strcmp(argv[i], "-quiet")) {
34 quiet = 1;
35 }
36 else if (!strcmp(argv[i], "-render")) {
37 i++;
38 render = argv[i];
39 }
40 else if (!strcmp(argv[i], "-keyword")) {
41 i++;
42 keyword = argv[i];
43 }
44 else if (!strcmp(argv[i], "-pdb")) {
45 i++;
46 input = PDB;
47 inputfile = argv[i];
48 }
49 else if (!strcmp(argv[i], "-keyval")) {
50 i++;
51 input = KEYVAL;
52 inputfile = argv[i];
53 }
54 else if (!strcmp(argv[i], "-level")) {
55 i++;
56 level = atoi(argv[i]);
57 }
58 else {
59 fprintf(stderr,"%s: unknown option: \"%s\"\n", argv[0], argv[i]);
60 abort();
61 }
62 }
63
64 // Find the molecule.
65 Ref<Molecule> mol;
66 if (input == PDB) {
67 Ref<AssignedKeyVal> keyval = new AssignedKeyVal();
68 keyval->assign("pdb_file", inputfile);
69 mol = new Molecule(keyval.pointer());
70 }
71 else {
72 Ref<KeyVal> keyval = new ParsedKeyVal(inputfile);
73 mol = new Molecule(new PrefixKeyVal(keyval, keyword));
74 }
75
76 // Set up the rendered molecule object.
77 Ref<AssignedKeyVal> tmpkv = new AssignedKeyVal();
78 Ref<AssignedKeyVal> keyval = new AssignedKeyVal();
79
80 keyval->assign("molecule", mol.pointer());
81 keyval->assign("model", model);
82
83 Ref<DescribedClass> atominfo = new AtomInfo(tmpkv.pointer());
84 keyval->assign("atominfo", atominfo);
85 tmpkv->clear();
86
87 Ref<RenderedObject> molobject;
88 if (!strcmp(model,"stick")) {
89 molobject = new RenderedStickMolecule(keyval.pointer());
90 }
91 else if (!strcmp(model,"ball")) {
92 molobject = new RenderedBallMolecule(keyval.pointer());
93 }
94 else if (!strcmp(model,"connolly")) {
95 tmpkv->assign("molecule", mol.pointer());
96 tmpkv->assign("atominfo", atominfo);
97 Ref<DescribedClass> volume = new ConnollyShape(tmpkv.pointer());
98 tmpkv->clear();
99 tmpkv->assignboolean("verbose", !quiet);
100 Ref<DescribedClass> trisurf = new TriangulatedSurface(tmpkv.pointer());
101 tmpkv->clear();
102 tmpkv->assign("surface", trisurf);
103 tmpkv->assign("volume", volume);
104 tmpkv->assign("resolution", 1.0);
105 tmpkv->assignboolean("remove_short_edges", 0);
106 tmpkv->assignboolean("remove_slender_edges", 0);
107 Ref<DescribedClass> surface
108 = new TriangulatedImplicitSurface(tmpkv.pointer());
109 tmpkv->clear();
110 keyval->assign("surface", surface);
111 molobject = new RenderedMolecularSurface(keyval.pointer());
112 }
113 else {
114 fprintf(stderr,"%s: unknown model \"%s\"\n", argv[0], model);
115 abort();
116 }
117
118 Ref<RenderedObjectSet> object;
119
120 if (render) {
121 object = new RenderedObjectSet;
122 object->add(molobject);
123 Ref<Appearance> appearance = new Appearance;
124 appearance->level().set(level);
125 object->appearance(appearance);
126 if (object.null()) {
127 fprintf(stderr,"%s: got a null object to render\n",argv[0]);
128 abort();
129 }
130
131 // Set up the renderer.
132 Ref<Render> renderer;
133 if (!strcmp("oogl", render)) {
134 renderer = new OOGLRender;
135 }
136 else {
137 fprintf(stderr,"%s: unknown renderer: \"%s\"\n", argv[0], render);
138 }
139
140 // Render the object.
141 renderer->render(object.pointer());
142 }
143
144 if (!quiet) {
145 ConnollyShape::print_counts();
146 CS2Sphere::print_counts();
147 }
148
149 fflush(stdout);
150 fflush(stderr);
151 return 0;
152}
Note: See TracBrowser for help on using the repository browser.