Example of drawing molecules.
MGL code:
alpha on:light on subplot 2 2 0 '':title 'Methane, CH_4':rotate 60 120 sphere 0 0 0 0.25 'k':drop 0 0 0 0 0 1 0.35 'h' 1 2:sphere 0 0 0.7 0.25 'g' drop 0 0 0 -0.94 0 -0.33 0.35 'h' 1 2:sphere -0.66 0 -0.23 0.25 'g' drop 0 0 0 0.47 0.82 -0.33 0.35 'h' 1 2:sphere 0.33 0.57 -0.23 0.25 'g' drop 0 0 0 0.47 -0.82 -0.33 0.35 'h' 1 2:sphere 0.33 -0.57 -0.23 0.25 'g' subplot 2 2 1 '':title 'Water, H{_2}O':rotate 60 100 sphere 0 0 0 0.25 'r':drop 0 0 0 0.3 0.5 0 0.3 'm' 1 2:sphere 0.3 0.5 0 0.25 'g' drop 0 0 0 0.3 -0.5 0 0.3 'm' 1 2:sphere 0.3 -0.5 0 0.25 'g' subplot 2 2 2 '':title 'Oxygen, O_2':rotate 60 120 drop 0 0.5 0 0 -0.3 0 0.3 'm' 1 2:sphere 0 0.5 0 0.25 'r' drop 0 -0.5 0 0 0.3 0 0.3 'm' 1 2:sphere 0 -0.5 0 0.25 'r' subplot 2 2 3 '':title 'Ammonia, NH_3':rotate 60 120 sphere 0 0 0 0.25 'b':drop 0 0 0 0.33 0.57 0 0.32 'n' 1 2 sphere 0.33 0.57 0 0.25 'g':drop 0 0 0 0.33 -0.57 0 0.32 'n' 1 2 sphere 0.33 -0.57 0 0.25 'g':drop 0 0 0 -0.65 0 0 0.32 'n' 1 2 sphere -0.65 0 0 0.25 'g'
C++ code:
void smgl_molecule(mglGraph *gr) // example of moleculas { gr->VertexColor(false); gr->Compression(false); // per-vertex colors and compression are detrimental to transparency gr->DoubleSided(false); // we do not get into atoms, while rendering internal surface has negative impact on trasparency gr->Alpha(true); gr->Light(true); gr->SubPlot(2,2,0,""); gr->Title("Methane, CH_4"); gr->StartGroup("Methane"); gr->Rotate(60,120); gr->Sphere(mglPoint(0,0,0),0.25,"k"); gr->Drop(mglPoint(0,0,0),mglPoint(0,0,1),0.35,"h",1,2); gr->Sphere(mglPoint(0,0,0.7),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(-0.94,0,-0.33),0.35,"h",1,2); gr->Sphere(mglPoint(-0.66,0,-0.23),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(0.47,0.82,-0.33),0.35,"h",1,2); gr->Sphere(mglPoint(0.33,0.57,-0.23),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(0.47,-0.82,-0.33),0.35,"h",1,2); gr->Sphere(mglPoint(0.33,-0.57,-0.23),0.25,"g"); gr->EndGroup(); gr->SubPlot(2,2,1,""); gr->Title("Water, H_{2}O"); gr->StartGroup("Water"); gr->Rotate(60,100); gr->StartGroup("Water_O"); gr->Sphere(mglPoint(0,0,0),0.25,"r"); gr->EndGroup(); gr->StartGroup("Water_Bond_1"); gr->Drop(mglPoint(0,0,0),mglPoint(0.3,0.5,0),0.3,"m",1,2); gr->EndGroup(); gr->StartGroup("Water_H_1"); gr->Sphere(mglPoint(0.3,0.5,0),0.25,"g"); gr->EndGroup(); gr->StartGroup("Water_Bond_2"); gr->Drop(mglPoint(0,0,0),mglPoint(0.3,-0.5,0),0.3,"m",1,2); gr->EndGroup(); gr->StartGroup("Water_H_2"); gr->Sphere(mglPoint(0.3,-0.5,0),0.25,"g"); gr->EndGroup(); gr->EndGroup(); gr->SubPlot(2,2,2,""); gr->Title("Oxygen, O_2"); gr->StartGroup("Oxygen"); gr->Rotate(60,120); gr->Drop(mglPoint(0,0.5,0),mglPoint(0,-0.3,0),0.3,"m",1,2); gr->Sphere(mglPoint(0,0.5,0),0.25,"r"); gr->Drop(mglPoint(0,-0.5,0),mglPoint(0,0.3,0),0.3,"m",1,2); gr->Sphere(mglPoint(0,-0.5,0),0.25,"r"); gr->EndGroup(); gr->SubPlot(2,2,3,""); gr->Title("Ammonia, NH_3"); gr->StartGroup("Ammonia"); gr->Rotate(60,120); gr->Sphere(mglPoint(0,0,0),0.25,"b"); gr->Drop(mglPoint(0,0,0),mglPoint(0.33,0.57,0),0.32,"n",1,2); gr->Sphere(mglPoint(0.33,0.57,0),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(0.33,-0.57,0),0.32,"n",1,2); gr->Sphere(mglPoint(0.33,-0.57,0),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(-0.65,0,0),0.32,"n",1,2); gr->Sphere(mglPoint(-0.65,0,0),0.25,"g"); gr->EndGroup(); gr->DoubleSided( true ); // put back }