Files @ bc383c25c970
Branch filter:

Location: EI/VirtualLeaf/src/node.cpp

Michael Guravage
Moved the Windows LIBXML2, LIBICONV and LIBZ libraries into the
destribtion, and changed the various project files accordingly.

--
user: Michael Guravage <michael.guravage@cwi.nl>
branch 'default'
added lib/libiconv/include/iconv.h
added lib/libiconv/include/libcharset.h
added lib/libiconv/include/localcharset.h
added lib/libiconv/lib/charset.alias
added lib/libiconv/lib/libcharset.la
added lib/libiconv/lib/libiconv.la
added lib/libiconv/share/doc/libiconv/COPYING
added lib/libiconv/share/doc/libiconv/COPYING.LIB
added lib/libiconv/share/doc/libiconv/NEWS
added lib/libiconv/share/doc/libiconv/NOTES
added lib/libxml2/include/libxml/DOCBparser.h
added lib/libxml2/include/libxml/HTMLparser.h
added lib/libxml2/include/libxml/HTMLtree.h
added lib/libxml2/include/libxml/SAX.h
added lib/libxml2/include/libxml/SAX2.h
added lib/libxml2/include/libxml/c14n.h
added lib/libxml2/include/libxml/catalog.h
added lib/libxml2/include/libxml/chvalid.h
added lib/libxml2/include/libxml/debugXML.h
added lib/libxml2/include/libxml/dict.h
added lib/libxml2/include/libxml/encoding.h
added lib/libxml2/include/libxml/entities.h
added lib/libxml2/include/libxml/globals.h
added lib/libxml2/include/libxml/hash.h
added lib/libxml2/include/libxml/list.h
added lib/libxml2/include/libxml/nanoftp.h
added lib/libxml2/include/libxml/nanohttp.h
added lib/libxml2/include/libxml/parser.h
added lib/libxml2/include/libxml/parserInternals.h
added lib/libxml2/include/libxml/pattern.h
added lib/libxml2/include/libxml/relaxng.h
added lib/libxml2/include/libxml/schemasInternals.h
added lib/libxml2/include/libxml/schematron.h
added lib/libxml2/include/libxml/threads.h
added lib/libxml2/include/libxml/tree.h
added lib/libxml2/include/libxml/uri.h
added lib/libxml2/include/libxml/valid.h
added lib/libxml2/include/libxml/xinclude.h
added lib/libxml2/include/libxml/xlink.h
added lib/libxml2/include/libxml/xmlIO.h
added lib/libxml2/include/libxml/xmlautomata.h
added lib/libxml2/include/libxml/xmlerror.h
added lib/libxml2/include/libxml/xmlexports.h
added lib/libxml2/include/libxml/xmlmemory.h
added lib/libxml2/include/libxml/xmlmodule.h
added lib/libxml2/include/libxml/xmlreader.h
added lib/libxml2/include/libxml/xmlregexp.h
added lib/libxml2/include/libxml/xmlsave.h
added lib/libxml2/include/libxml/xmlschemas.h
added lib/libxml2/include/libxml/xmlschemastypes.h
added lib/libxml2/include/libxml/xmlstring.h
added lib/libxml2/include/libxml/xmlunicode.h
added lib/libxml2/include/libxml/xmlversion.h
added lib/libxml2/include/libxml/xmlwin32version.h
added lib/libxml2/include/libxml/xmlwriter.h
added lib/libxml2/include/libxml/xpath.h
added lib/libxml2/include/libxml/xpathInternals.h
added lib/libxml2/include/libxml/xpointer.h
added lib/libxml2/lib/libxml2.dll
added lib/libxml2/lib/libxml2.lib
added lib/libz/include/zconf.h
added lib/libz/include/zlib.h
changed src/ChangeLog
changed src/Makefile
changed src/VirtualLeaf.pro
changed src/build_models/ChangeLog
changed src/build_models/Makefile
changed src/build_models/plugin_auxingrowth.pro
changed src/build_models/plugin_meinhardt.pro
changed src/build_models/plugin_test.pro
changed src/libplugin.pro
/*
 *
 *  This file is part of the Virtual Leaf.
 *
 *  The Virtual Leaf is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  The Virtual Leaf is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with the Virtual Leaf.  If not, see <http://www.gnu.org/licenses/>.
 *
 *  Copyright 2010 Roeland Merks.
 *
 */

#include <string>
#include <sstream>
#ifdef QTGRAPHICS
#include <qstring.h>
#include <QGraphicsSimpleTextItem>
#endif
#include "node.h" 
#include "cell.h"
#include "mesh.h"
#include "random.h"
#include "parameter.h"
#include "sqr.h"
#include "pi.h"
#include "warning.h"

static const std::string _module_id("$Id$");

extern Parameter par;

int Node::nnodes=0;
double Node::target_length=1;

ostream &Edge::print(ostream &os) const {
  return os << "{ " << first->Index() << ", " << second->Index() << " }";
}

ostream &Neighbor::print(ostream &os) const {

  os << " {" << cell->Index() << " " << nb1->Index() << " " << nb2->Index() << "}";
  return os;
}

ostream &operator<<(ostream &os, const Neighbor &n) {
  n.print(os);
  return os;
}


Node::Node(void) : Vector()
{
  index=(nnodes++);
  node_set =0;
  fixed=false;
  boundary=false;
  sam=false;
  dead=false;
}

Node::Node(int ind) : Vector()
{
  node_set =0;
  index=ind;
  fixed=false;
  boundary=false;
  sam=false;
  dead=false;
}

Node::Node(const Vector &src) : Vector(src)
{
  node_set = 0;
  index=(nnodes++);
  fixed=false;
  boundary=false;
  sam=false;
  dead = false;
}

Node::Node(double x,double y, double z) : Vector (x,y,z)
{
  node_set = 0;
  index=(nnodes++);
  fixed=false;
  boundary=false;
  sam=false;
  dead = false;
}

Node::Node(const Node &src) : Vector(src)
{
  node_set=0;
  owners=src.owners;
  m=src.m;
  index=src.index;
  fixed = src.fixed;
  boundary = src.boundary;
  sam=src.sam;
  dead = src.dead;
}


Cell &Node::getCell(const Neighbor &i)
{
  return *i.getCell(); // use accessor!
}


ostream &Node::print(ostream &os) const {

  if (!dead) 
    os << "Node ";
  else
    os << "DEAD NODE ";

  os  << index << "[ {" << x << ", " << y << ", " << z << "}: {";

  os << "Neighbors = { ";

  for (list<Neighbor>::const_iterator i =  owners.begin(); i!=owners.end(); i++) {
    os << " {" << i->cell->Index() << " " << i->nb1->Index() << " " << i->nb2->Index() << "} ";
  }
  os << " } " << endl;

  return os;
}


#ifdef QTGRAPHICS
void Node::DrawIndex(QGraphicsScene *c) const {

  //return DrawOwners(c);
  stringstream text;
  text << index;
  QGraphicsSimpleTextItem *number = new QGraphicsSimpleTextItem ( QString (text.str().c_str()), 0, c );
  number->setFont( QFont( "Helvetica", par.nodenumsize, QFont::Bold) );
  number->setPen( QPen (par.textcolor) );
  number->setZValue(20);
  number->show();
  Vector offs=Cell::Offset();
  number -> setPos(
		   ((offs.x+x)*Cell::Factor()),
		   ((offs.y+y)*Cell::Factor()) );
}

void Node::DrawOwners(QGraphicsScene *c) const {

  stringstream text;
  text << owners.size();

  QGraphicsSimpleTextItem *number = new QGraphicsSimpleTextItem ( QString (text.str().c_str()), 0, c );
  number->setFont( QFont( "Helvetica", par.nodenumsize, QFont::Bold) );
  number->setPen( QPen(par.textcolor) );
  number->setZValue(20);
  number->show();
  Vector offs=Cell::Offset();

  number ->setPos(((offs.x+x)*Cell::Factor()),
		  ((offs.y+y)*Cell::Factor()) );
}


QVector<qreal> Node::NeighbourAngles(void)
{
  QVector<qreal> angles;
  for (list<Neighbor>::iterator i=owners.begin(); i!=owners.end(); i++) {
    Vector v1 = (*this - *i->nb1).Normalised();
    Vector v2 = (*this - *i->nb2).Normalised();	

    double angle = v1.SignedAngle(v2);
    if (angle<0) {
      //cerr << "Changing sign of angle " << angle << endl;
      angle = angle + 2*Pi;
    }
    angles.push_back(angle);

    //cerr << "Cell " << i->cell->Index() << ": " <<  v1 << " and " << v2 
    //     << ": angle = " << angles.back() << ", " << v1.Angle(v2) << endl;

  }

  double sum=0.;
  for (QVector<qreal>::iterator i=angles.begin(); i!=angles.end(); i++) {
    sum+=*i;
  }
  //cerr << "Angle sum = " << sum << endl;
  // Check if the summed angle is different from 2 Pi 
  if (fabs(sum-(2*Pi))>0.0001) {

    MyWarning::warning("sum = %f",sum);
  }
  return angles;
}


#endif

ostream &operator<<(ostream &os, const Node &n) {
  n.print(os);
  return os;
}

/* finis */