<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <title>The Gnome Chemistry Utils: atom.h Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">The Gnome Chemistry Utils  <span id="projectnumber">0.14.2</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.1.2 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_6719ab1f1f7655efc2fa43f7eb574fd1.html">libs</a></li><li class="navelem"><a class="el" href="dir_69c622b84a81aca1ad0f892f4a5e46bf.html">gcp</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">gcp/atom.h</div> </div> </div><!--header--> <div class="contents"> <a href="gcp_2atom_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// -*- C++ -*-</span></div> <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div> <div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">/*</span></div> <div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * GChemPaint library</span></div> <div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * atom.h</span></div> <div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div> <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Copyright (C) 2001-2012 Jean Bréfort <jean.brefort@normalesup.org></span></div> <div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div> <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * This program is free software; you can redistribute it and/or</span></div> <div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * modify it under the terms of the GNU General Public License as</span></div> <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * published by the Free Software Foundation; either version 3 of the</span></div> <div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * License, or (at your option) any later version.</span></div> <div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> *</span></div> <div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div> <div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div> <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div> <div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * GNU General Public License for more details.</span></div> <div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> *</span></div> <div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div> <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div> <div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301</span></div> <div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * USA</span></div> <div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> */</span></div> <div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div> <div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#ifndef GCHEMPAINT_ATOM_H</span></div> <div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span><span class="preprocessor">#define GCHEMPAINT_ATOM_H</span></div> <div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <map></span></div> <div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <glib.h></span></div> <div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <<a class="code" href="item-client_8h.html">gccv/item-client.h</a>></span></div> <div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <<a class="code" href="gccv_2structs_8h.html">gccv/structs.h</a>></span></div> <div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <<a class="code" href="gcu_2atom_8h.html">gcu/atom.h</a>></span></div> <div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <<a class="code" href="dialog-owner_8h.html">gcu/dialog-owner.h</a>></span></div> <div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include <<a class="code" href="element_8h.html">gcu/element.h</a>></span></div> <div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <<a class="code" href="macros_8h.html">gcu/macros.h</a>></span></div> <div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div> <div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keyword">namespace </span>gcu {</div> <div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">class </span>UIManager;</div> <div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }</div> <div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div> <div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">namespace </span>gcp {</div> <div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div> <div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">class </span>Bond;</div> <div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">class </span>Molecule;</div> <div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div> <div class="line"><a name="l00051"></a><span class="lineno"><a class="code" href="gcp_2atom_8h.html#a2fe190c330e5d91e4429843c15f49881"> 51</a></span> <span class="preprocessor">#define POSITION_NE 1</span></div> <div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00055"></a><span class="lineno"><a class="code" href="gcp_2atom_8h.html#ac90e594b40e8035f77cf94e3c83c1217"> 55</a></span> <span class="preprocessor">#define POSITION_NW 2</span></div> <div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00059"></a><span class="lineno"><a class="code" href="gcp_2atom_8h.html#a8872dd603f5fc2be6fccd561fd98ee06"> 59</a></span> <span class="preprocessor">#define POSITION_N 4</span></div> <div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00063"></a><span class="lineno"><a class="code" href="gcp_2atom_8h.html#a2ee47c800dc7838770b705fc9adeb5e5"> 63</a></span> <span class="preprocessor">#define POSITION_SE 8</span></div> <div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00067"></a><span class="lineno"><a class="code" href="gcp_2atom_8h.html#a8faffbafa446ea342b5e9215c42c4cc0"> 67</a></span> <span class="preprocessor">#define POSITION_SW 16</span></div> <div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00071"></a><span class="lineno"><a class="code" href="gcp_2atom_8h.html#af9acaf37134f304e9c3464ebc642cf38"> 71</a></span> <span class="preprocessor">#define POSITION_S 32</span></div> <div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00075"></a><span class="lineno"><a class="code" href="gcp_2atom_8h.html#a40e41338ee48271836885c80d795f319"> 75</a></span> <span class="preprocessor">#define POSITION_E 64</span></div> <div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00079"></a><span class="lineno"><a class="code" href="gcp_2atom_8h.html#a792dda850488757ab7e20a5b9c84b2aa"> 79</a></span> <span class="preprocessor">#define POSITION_W 128</span></div> <div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00085"></a><span class="lineno"><a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2"> 85</a></span> <span class="keyword">typedef</span> <span class="keyword">enum</span> {</div> <div class="line"><a name="l00089"></a><span class="lineno"><a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2ab9a55ae2c26fe587e2cb5efc6345938a"> 89</a></span>  <a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2ab9a55ae2c26fe587e2cb5efc6345938a">LEFT_HPOS</a>,</div> <div class="line"><a name="l00093"></a><span class="lineno"><a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2ad7f2f4b5e1ae3a73111658e3a30c35a6"> 93</a></span>  <a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2ad7f2f4b5e1ae3a73111658e3a30c35a6">RIGHT_HPOS</a>,</div> <div class="line"><a name="l00097"></a><span class="lineno"><a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2ac1f203ffbdb529893227df4d5e481882"> 97</a></span>  <a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2ac1f203ffbdb529893227df4d5e481882">TOP_HPOS</a>,</div> <div class="line"><a name="l00101"></a><span class="lineno"><a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2ab411521f150258ea96c6f9414c87a19b"> 101</a></span>  <a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2ab411521f150258ea96c6f9414c87a19b">BOTTOM_HPOS</a>,</div> <div class="line"><a name="l00105"></a><span class="lineno"><a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2a3232354276e9c6be7a9010eb46b4816c"> 105</a></span>  <a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2a3232354276e9c6be7a9010eb46b4816c">AUTO_HPOS</a>,</div> <div class="line"><a name="l00106"></a><span class="lineno"> 106</span> } <a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2">HPos</a>;</div> <div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div> <div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">class </span>Electron;</div> <div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div> <div class="line"><a name="l00113"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html"> 113</a></span> <span class="keyword">class </span><a class="code" href="classgcp_1_1Atom.html">Atom</a>: <span class="keyword">public</span> <a class="code" href="classgcu_1_1Atom.html">gcu::Atom</a>, <span class="keyword">public</span> <a class="code" href="classgcu_1_1DialogOwner.html">gcu::DialogOwner</a>, <span class="keyword">public</span> <a class="code" href="classgccv_1_1ItemClient.html" title="the base class for objects associated with a canvas item.">gccv::ItemClient</a></div> <div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div> <div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <a class="code" href="classgcp_1_1Atom.html#a585be3b15c7324e813a09222f325bd05">Atom</a> ();</div> <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="classgcp_1_1Atom.html#a585be3b15c7324e813a09222f325bd05">Atom</a> (<span class="keywordtype">int</span> Z, <span class="keywordtype">double</span> <a class="code" href="classgcu_1_1Atom.html#a845f98c4e1bb2fe68dfa3fc61a83f79d">x</a>, <span class="keywordtype">double</span> <a class="code" href="classgcu_1_1Atom.html#a483d6aec85bb09acf681d0070f46149c">y</a>, <span class="keywordtype">double</span> <a class="code" href="classgcu_1_1Atom.html#aca911471b8848a4c78205c328557a7cc">z</a>);</div> <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keyword">virtual</span> <a class="code" href="classgcp_1_1Atom.html#a4ea961d1567b04333cf5a2d3ea2a3978">~Atom</a> ();</div> <div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div> <div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">public</span> :</div> <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#ad3919236bd9ce0816e4a07712048e9df">SetZ</a> (<span class="keywordtype">int</span> Z);</div> <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a009e0ce9ae2f156c2d292d1275d5f685">AddBond</a> (<a class="code" href="classgcu_1_1Bond.html">gcu::Bond</a>* pBond);</div> <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a41158b79556591cf4154ab0bed4139e4">RemoveBond</a> (<a class="code" href="classgcu_1_1Bond.html">gcu::Bond</a>* pBond);</div> <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#af207aeb4fe1d8dfa90853c3f041d0d48">Update</a> ();</div> <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordtype">int</span> <a class="code" href="classgcp_1_1Atom.html#a52ab2c14845106a07497aea0ac7721f5">GetTotalBondsNumber</a> () <span class="keyword">const</span>; <span class="comment">//take bond order into account</span></div> <div class="line"><a name="l00164"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html#a974d2026ac161b2fe3403c1151a64c74"> 164</a></span> <span class="comment"></span> <span class="keywordtype">int</span> <a class="code" href="classgcp_1_1Atom.html#a974d2026ac161b2fe3403c1151a64c74">GetAttachedHydrogens</a> ()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_nH;}</div> <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2">HPos</a> <a class="code" href="classgcp_1_1Atom.html#a17f84bebbf93dcfd8869b716eb245ed1">GetBestSide</a> ();</div> <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">virtual</span> <a class="code" href="namespacegccv.html#a426bffc4b1e2ed677e0d1d111960e4a9">gccv::Anchor</a> <a class="code" href="classgcp_1_1Atom.html#a5c888ebd6f92fbf4fbcace5728c6a82d">GetChargePosition</a> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>& Pos, <span class="keywordtype">double</span> Angle, <span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y);</div> <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">virtual</span> <span class="keywordtype">int</span> <a class="code" href="classgcp_1_1Atom.html#ab22695d2697b49885b5191680fcf7fe2">GetAvailablePosition</a> (<span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y);</div> <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#a47e290a97ca2e7727a3983cc70dc75ba">GetRelativePosition</a> (<span class="keywordtype">double</span> angle, <span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y);</div> <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#a58f2ad93c252d3aafda378510bae3fad">GetPosition</a> (<span class="keywordtype">double</span> angle, <span class="keywordtype">double</span>& x, <span class="keywordtype">double</span>& y);</div> <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">virtual</span> xmlNodePtr <a class="code" href="classgcp_1_1Atom.html#a67db585c20bdd33ac5ac071794b67dd5">Save</a> (xmlDocPtr xml) <span class="keyword">const</span>;</div> <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#a8eed490ca4ecc446a4a1cdc8aeb46f98">Load</a> (xmlNodePtr node);</div> <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#a5526b5a9b31aae0fe4d97f35680264d3">LoadNode</a> (xmlNodePtr node);</div> <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#affe3a63809fcb1ca9cc8a02dd45b6902">AddItem</a> ();</div> <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#accb0d96fef92726488bef04bf87b38ce">SetSelected</a> (<span class="keywordtype">int</span> state);</div> <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#ad9a779a82911c075694a9f5e1d6a7494">AcceptNewBonds</a> (<span class="keywordtype">int</span> nb = 1);</div> <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#aa575936870844269806d17d31efb2835">AcceptCharge</a> (<span class="keywordtype">int</span> charge);</div> <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code" href="classgcp_1_1Atom.html#ac06b20c09e7568191922a2801d307fed">GetYAlign</a> ();</div> <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#ab74a17bd03ec01c84a96d54c48ef48ea">Move</a> (<span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y, <span class="keywordtype">double</span> z = 0.);</div> <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a2636a34f79bd72b0abb7c2e42fd016e0">Transform2D</a> (<a class="code" href="classgcu_1_1Matrix2D.html">gcu::Matrix2D</a>& m, <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y);</div> <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#a792acfe4dcd58a19acf781c71911ce02">BuildContextualMenu</a> (<a class="code" href="classgcu_1_1UIManager.html" title="base class for a user interface manager">gcu::UIManager</a> *UIManager, <a class="code" href="classgcu_1_1Object.html#a6f15e766fdfb066008bd4b0779574549">Object</a> *<span class="keywordtype">object</span>, <span class="keywordtype">double</span> x, <span class="keywordtype">double</span> y);</div> <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a8a7e7ce2a09f1d0de8b90e5e833580b8">AddToMolecule</a> (<a class="code" href="classgcp_1_1Molecule.html" title="GChemPaint molecule class.">Molecule</a>* Mol);</div> <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#a24167266fe3074c314268f3f73399c9c">HasImplicitElectronPairs</a> ();</div> <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#abd47c0fcae9eaaf8622f22a442f347c2">MayHaveImplicitUnpairedElectrons</a> ();</div> <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a534a917f790b72f180216a922b79fd24">AddElectron</a> (<a class="code" href="classgcp_1_1Electron.html">Electron</a>* electron);</div> <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#aab3b25c01105e26c708bf121d2dfdbe6">RemoveElectron</a> (<a class="code" href="classgcp_1_1Electron.html">Electron</a>* electron);</div> <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a330a76649d4ca4b51c230f51c28274fe">NotifyPositionOccupation</a> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> pos, <span class="keywordtype">bool</span> occupied);</div> <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a6fcc259201bcd5174f6432b89c9e7e0a">SetChargePosition</a> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> Pos, <span class="keywordtype">bool</span> def, <span class="keywordtype">double</span> angle = 0., <span class="keywordtype">double</span> distance = 0.);</div> <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordtype">char</span> <a class="code" href="classgcp_1_1Atom.html#a5c888ebd6f92fbf4fbcace5728c6a82d">GetChargePosition</a> (<span class="keywordtype">double</span> *Angle, <span class="keywordtype">double</span> *Dist) <span class="keyword">const</span>;</div> <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a1d0a59d6ffd19a170164138bbcde223f">SetCharge</a> (<span class="keywordtype">int</span> charge);</div> <div class="line"><a name="l00344"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html#a6afc5b1b3a3d09a5c369f3e4d04fca6b"> 344</a></span>  <span class="keywordtype">int</span> <a class="code" href="classgcp_1_1Atom.html#a6afc5b1b3a3d09a5c369f3e4d04fca6b">GetCharge</a> ()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="classgcu_1_1Atom.html#a733db6db77be736879f983fbb11bcdaa">m_Charge</a>;}</div> <div class="line"><a name="l00348"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html#aeb5384777a0771e6e79b6f495602f0a3"> 348</a></span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#aeb5384777a0771e6e79b6f495602f0a3">ForceChanged</a> () {m_Changed = <span class="keyword">true</span>;}</div> <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#ab19ede9511483d34fb841c98e13491a0">Match</a> (<a class="code" href="classgcu_1_1Atom.html">gcu::Atom</a> *atom, <a class="code" href="classgcu_1_1AtomMatchState.html">gcu::AtomMatchState</a> &state);</div> <div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div> <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a2f2f6468dfaa1ad29dcfb650d51f987f">GetSymbolGeometry</a> (<span class="keywordtype">double</span> &width, <span class="keywordtype">double</span> &height, <span class="keywordtype">double</span> &angle, <span class="keywordtype">bool</span> up) <span class="keyword">const</span>;</div> <div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div> <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#aa63a73d6e59695656d7e739c7b049fee">HasAvailableElectrons</a> (<span class="keywordtype">bool</span> paired);</div> <div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div> <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <a class="code" href="classgcp_1_1Bond.html">Bond</a> *<a class="code" href="classgcp_1_1Atom.html#a241726f10b4232eb9a6b0e386de079c6">GetBondAtAngle</a> (<span class="keywordtype">double</span> angle);</div> <div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div> <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#abc8df08d9c521c35dfd30515c59f90c1">UpdateStereoBonds</a> ();</div> <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#a0934592f937dafb15e38b4dbb4a6ee54">HasStereoBond</a> () <span class="keyword">const</span>;</div> <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <a class="code" href="classgcp_1_1Bond.html">Bond</a> *<a class="code" href="classgcp_1_1Atom.html#a595312cb78a09e5741e55a86c2345715">GetNewmanBond</a> () <span class="keyword">const</span>;</div> <div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div> <div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keyword">protected</span>:</div> <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordtype">void</span> <a class="code" href="classgcp_1_1Atom.html#a4784ed328b09666189095aabe78413b3">BuildSymbolGeometry</a> (<span class="keywordtype">double</span> width, <span class="keywordtype">double</span> height, <span class="keywordtype">double</span> ascent);</div> <div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div> <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordtype">bool</span> <a class="code" href="classgcp_1_1Atom.html#ae39a3fe66e5bf72ecdf54eb2e08bd8dc">SetProperty</a> (<span class="keywordtype">unsigned</span> property, <span class="keywordtype">char</span> <span class="keyword">const</span> *value);</div> <div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div> <div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordtype">void</span> UpdateAvailablePositions ();</div> <div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div> <div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <a class="code" href="classgcu_1_1Element.html" title="Chemical element.">gcu::Element</a> *m_Element;</div> <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordtype">int</span> m_nH;</div> <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordtype">int</span> m_Valence; <span class="comment">//valence</span></div> <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordtype">int</span> m_ValenceOrbitals;</div> <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="keywordtype">int</span> m_nlp; <span class="comment">//lone electron pairs number</span></div> <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordtype">int</span> m_nlu; <span class="comment">//single electrons number</span></div> <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordtype">double</span> m_width, m_height; <span class="comment">//size of the atomic symbol in the canvas</span></div> <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordtype">double</span> m_length, m_text_height; <span class="comment">// size of the text buffer</span></div> <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2">HPos</a> m_HPos; <span class="comment">//0 = left, 1 = right, 2 = top, 3 = bottom, 4 = auto</span></div> <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordtype">bool</span> m_ChargeAuto;</div> <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordtype">int</span> m_Changed; <span class="comment">//update needs regenerate the buffer</span></div> <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordtype">int</span> m_ascent;</div> <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordtype">double</span> m_lbearing;</div> <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> m_AvailPos; <span class="comment">//available standard positions for charge and electrons representations</span></div> <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> m_OccupiedPos;</div> <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordtype">bool</span> m_AvailPosCached;</div> <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> m_ChargePos;</div> <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordtype">bool</span> m_ChargeAutoPos;</div> <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordtype">double</span> m_ChargeAngle;</div> <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordtype">double</span> m_ChargeDist;</div> <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keywordtype">double</span> m_ChargeWidth, m_ChargeTWidth, m_ChargeXOffset, m_ChargeYOffset;</div> <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  std::list<double> m_AngleList;</div> <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  std::map<double, double> m_InterBonds; <span class="comment">/* positions betwen bonds. First value is the</span></div> <div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="comment"> angle between the two bonds and second value is the direction */</span></div> <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  PangoLayout *m_Layout, *m_ChargeLayout, *m_HLayout;</div> <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordtype">double</span> m_xHOffs, m_yHOffs;</div> <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordtype">bool</span> m_DrawCircle;</div> <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  std::string m_FontName;</div> <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordtype">double</span> m_SWidth, m_SHeightH, m_SHeightL, m_SAngleH, m_SAngleL;</div> <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="comment">// special offset for underlying rectangle; will be removed in next version</span></div> <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keywordtype">double</span> m_xROffs, m_yROffs;</div> <div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div> <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="comment">// atom parity stuff</span></div> <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="classgcp_1_1Atom.html">Atom</a> *m_Bonded[4]; <span class="comment">// always using positive parity</span></div> <div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div> <div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="keyword">protected</span>:</div> <div class="line"><a name="l00465"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html#a1f354e6337f550d02fccff5ebef6de5a"> 465</a></span>  <span class="keywordtype">double</span> <a class="code" href="classgcp_1_1Atom.html#a1f354e6337f550d02fccff5ebef6de5a">m_CHeight</a>;</div> <div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div> <div class="line"><a name="l00478"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html#a85164bd7e0d5e93934b7f0c9ea59fc52"> 478</a></span> <a class="code" href="macros_8h.html#a2e6e8322502a538f4583d41206cea297">GCU_PROP</a> (<span class="keywordtype">bool</span>, ShowSymbol)</div> <div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div> <div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div> <div class="line"><a name="l00491"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html#a608bcf3065c2936b488c6b8dcfcad057"> 491</a></span> <a class="code" href="macros_8h.html#a2e6e8322502a538f4583d41206cea297">GCU_PROP</a> (<a class="code" href="namespacegcp.html#aa66e4b39c091a3385363101d7a55e7c2">HPos</a>, HPosStyle) <span class="comment">//0=force left, 1=force right, 2=force top, 3=force bottom, 4=auto.</span></div> <div class="line"><a name="l00503"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html#a3d806bc31b3f84b2338748eb7900e784"> 503</a></span> <span class="comment"></span><a class="code" href="macros_8h.html#a4afc3ecac8195714ecd17b3fcfae14b5">GCU_POINTER_PROP</a> (gccv::Item, ChargeItem)</div> <div class="line"><a name="l00515"></a><span class="lineno"><a class="code" href="classgcp_1_1Atom.html#a8a532fd151b82ffc4793453031a2e6eb"> 515</a></span> <a class="code" href="macros_8h.html#a2e6e8322502a538f4583d41206cea297">GCU_PROP</a> (<span class="keywordtype">bool</span>, ShowCharge);</div> <div class="line"><a name="l00516"></a><span class="lineno"> 516</span> };</div> <div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div> <div class="line"><a name="l00518"></a><span class="lineno"> 518</span> } <span class="comment">// namespace gcp</span></div> <div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div> <div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor">#endif // GCHEMPAINT_ATOM_H</span></div> </div><!-- fragment --></div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Thu Mar 14 2013 17:34:28 for The Gnome Chemistry Utils by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.1.2 </small></address> </body> </html>