#include #include #include #include #include namespace icl{ Object::Object():T(Mat::id()),m_bPointsVisible(true),m_bLinesVisible(true), m_bTrianglesVisible(true),m_bQuadsVisible(true){ // {{{ open } // }}} Object::~Object(){ // {{{ open } // }}} void Object::project(const Mat &CAMMATRIX){ // {{{ open for(unsigned int i=0;iz()+b->z()+c->z())/3; z = ( (*a)[2] + (*b)[2] + (*c)[2] )/3; } const Vec *a,*b,*c,*color; float z; bool operator<(const P3 &p) const{ return zz()+b->z()+c->z()+d->z())/4; z = ( (*a)[2] + (*b)[2] + (*c)[2] +(*c)[2]) / 4; } const Vec *a,*b,*c,*d,*color; float z; bool operator<(const P4 &p) const{ return z v; const VecArray &p = m_vecPtsProj; for(unsigned int i=0;icolor(0,0,0,0); for(int i=0;i<(int)v.size();i++){ widget->fill((int)(*(v[i].color))[0], (int)(*(v[i].color))[1], (int)(*(v[i].color))[2], (int)(*(v[i].color))[3]); widget->triangle( (*(v[i].a))[0],(*(v[i].a))[1], (*(v[i].b))[0],(*(v[i].b))[1], (*(v[i].c))[0],(*(v[i].c))[1] ); } } if(m_bQuadsVisible && m_vecQuads.size()){ vector v; const VecArray &p = m_vecPtsProj; for(unsigned int i=0;icolor(0,0,0,0); for(int i=0;i<(int)v.size();i++){ widget->fill((int)(*(v[i].color))[0], (int)(*(v[i].color))[1], (int)(*(v[i].color))[2], (int)(*(v[i].color))[3]); widget->quad( (*(v[i].a))[0],(*(v[i].a))[1], (*(v[i].b))[0],(*(v[i].b))[1], (*(v[i].c))[0],(*(v[i].c))[1], (*(v[i].d))[0],(*(v[i].d))[1] ); } } Size s = widget->getImageSize(); widget->fill(0,0,0,0); if(m_bLinesVisible){ for(unsigned int i=0;icolor((int)c[0],(int)c[1],(int)c[2],(int)c[3]); const Vec &a = m_vecPtsProj[m_vecConnections[i].first]; const Vec &b = m_vecPtsProj[m_vecConnections[i].second]; // widget->line(a.x(),a.y(),b.x(),b.y()); widget->line(a[0],a[1],b[0],b[1]); } } if(m_bPointsVisible){ for(unsigned int i=0;icolor((int)c[0],(int)c[1],(int)c[2],(int)c[3]); const Vec &v = m_vecPtsProj[i]; static const float r = 0.5; // widget->ellipse(v.x()-r/2,v.y()-r/2,r,r); widget->ellipse(v[0]-r/2,v[1]-r/2,r,r); } } } // }}} void Object::render(Img32f *image) const{ // {{{ open if(m_bTrianglesVisible && m_vecTriangles.size()){ vector v; const VecArray &p = m_vecPtsProj; for(unsigned int i=0;i v; const VecArray &p = m_vecPtsProj; for(unsigned int i=0;i &ls = m_vecConnections; const std::vector &ts = m_vecTriangles; const std::vector qs = m_vecQuads; const VecArray &pc = m_vecPtsColors; const VecArray &lc = m_vecLineColors; const VecArray &tc = m_vecTriangleColors; const VecArray &qc = m_vecQuadColors; bool ok = true; TEST_VAL(pc.size()==ps.size(),"invalid count of point colors"); TEST_VAL(lc.size()==ls.size(),"invalid count of line colors"); TEST_VAL(tc.size()==ts.size(),"invalid count of triangle colors"); TEST_VAL(qc.size()==qs.size(),"invalid count of quad colors"); int np = (int)ps.size(); int nl = (int)ls.size(); int nt = (int)ts.size(); int nq = (int)qs.size(); for(int i=0;i