| #pragma once |
| |
| |
| |
| |
| |
| #if !defined( \ |
| AFX_PATTERNPOSITION_H__9FB82504_34F2_11D6_B9E8_0040F674BE6A__INCLUDED_) |
| #define AFX_PATTERNPOSITION_H__9FB82504_34F2_11D6_B9E8_0040F674BE6A__INCLUDED_ |
| |
| #include <vector> |
| |
| #include <stdlib.h> |
| #include "STColSelPic.h" |
| #include "SError.h" |
| #include "SDef.h" |
| |
| class CPatternPosition { |
| bool isInSet(const int nbSet, const int *set, const int val); |
| void makeRandomPositions(const int nbPat, const int nbPixel, const int lX, |
| const int lY, const UCHAR *sel); |
| void makeDDPositions(const int lX, const int lY, UCHAR *sel, |
| const double minD, const double maxD); |
| void getPosAroundThis(const int lX, const int lY, const UCHAR *lSel, |
| const int xx, const int yy, int &xPos, int &yPos); |
| bool findEmptyPos(const int lX, const int lY, const UCHAR *lSel, int &xPos, |
| int &yPos, SRECT &bb); |
| void eraseCurrentArea(const int lX, const int lY, UCHAR *lSel, |
| std::vector<SPOINT> &ddc, const int xx, const int yy); |
| void sel0255To01(const int lX, const int lY, UCHAR *sel, SRECT &bb); |
| void prepareCircle(std::vector<SPOINT> &v, const double r); |
| |
| public: |
| std::vector<SPOINT> m_pos; |
| |
| CPatternPosition() : m_pos(0){}; |
| virtual ~CPatternPosition(); |
| |
| template <class P> |
| CPatternPosition(CSTColSelPic<P> &p, const int nbPixel, const double dens, |
| const double minD, const double maxD) { |
| try { |
| m_pos.clear(); |
| if (dens > 0.00001) { |
| |
| int nbPat = I_ROUND(((double)nbPixel * dens)); |
| |
| |
| nbPat = nbPat > nbPixel ? nbPixel : nbPat; |
| if (nbPat > 0) |
| makeRandomPositions(nbPat, nbPixel, p.m_lX, p.m_lY, p.m_sel.get()); |
| } else { |
| |
| makeDDPositions(p.m_lX, p.m_lY, p.m_sel.get(), minD, maxD); |
| } |
| } catch (SMemAllocError) { |
| throw; |
| } |
| } |
| |
| template <class P> |
| void drawTest(CSTColSelPic<P> &pic) { |
| for (std::vector<SPOINT>::iterator pv = m_pos.begin(); pv != m_pos.end(); |
| pv++) { |
| int xx = pv->x; |
| int yy = pv->y; |
| for (int y = yy - 1; y <= (yy + 1); y++) |
| for (int x = xx - 1; x <= (xx + 1); x++) |
| if (x >= 0 && y >= 0 && x < pic.m_lX && y < pic.m_lY) { |
| UC_PIXEL *pp = pic.m_pic + y * pic.m_lX + x; |
| pp->r = 0; |
| pp->g = 0; |
| pp->b = 255; |
| pp->m = 255; |
| } |
| } |
| } |
| }; |
| |
| #endif |