Click here to Skip to main content
12,398,225 members (53,581 online)
Click here to Skip to main content
Articles » Multimedia » OpenGL » General » Downloads

Stats

170.6K views
1.4K downloads
21 bookmarked
Posted

Tesselation of Mono Connected Non Convex Polygon

, 6 Feb 2002 CPOL
Tesselation of mono connected non convex polygon
PolyTry
PolyTry.clw
PolyTry.dsp
PolyTry.dsw
PolyTry.mak
PolyTry.opt
PolyTry.plg
PolyTry.ver
Release
PolyTry.exe
res
PolyTry.ico
PolyTryDoc.ico
Toolbar.bmp
// View.cpp : implementation of the CPolyTryView class
//

#include "stdafx.h"
#include "PolyTry.h"

#include "PolyTryDoc.h"
#include "View.h"
#include "triangle.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPolyTryView

IMPLEMENT_DYNCREATE(CPolyTryView, CView)

BEGIN_MESSAGE_MAP(CPolyTryView, CView)
	//{{AFX_MSG_MAP(CPolyTryView)
	ON_UPDATE_COMMAND_UI(ID_EDIT_POLYGONALIZE, OnUpdateEditPolygonalize)
	ON_COMMAND(ID_EDIT_POLYGONALIZE, OnEditPolygonalize)
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPolyTryView construction/destruction

CPolyTryView::CPolyTryView()
{
   m_nPoints      = 0;
   m_bFlushFaces  = false;
}

CPolyTryView::~CPolyTryView()
{
}

BOOL CPolyTryView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CPolyTryView drawing

void CPolyTryView::OnDraw(CDC* pDC)
{
	CPolyTryDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
   //
   CPen  pen(PS_SOLID,1,RGB(255,0,0));
   CPen* previusPen=pDC->SelectObject(&pen);
   //
   if( m_bFlushFaces  ){
      CBrush   brush(RGB(255,255,0));
      CBrush*  previusBrush=pDC->SelectObject(&brush);
      //
      CTriDC      triangle(pDC);
      Vector3F*   points   = new Vector3F[m_nPoints];
      float       Area=0.0f;
      //
      for( int i=0 ; i < m_nPoints ; i++ ){
         points[i][0]   = m_points[i].x;
         points[i][1]   = m_points[i].y;
         if( i ) Area+= ( m_points[i].x * m_points[i-1].y - m_points[i-1].x * m_points[i].y) * 0.5f;
      }
      //
      int   nTriangle=triangle.Triangulate(points,
                        Vector3F(0.0f,0.0f,( Area > 0.0f ? -11.0f : 1.0f ) ),
                        m_nPoints);
      //
	   CString	str;
	   str.Format(_T("Area %.2f nTriangle=%d"),Area,nTriangle);
	   pDC->TextOut(0,20,str);
      //
      for( i=0 ; i < m_nPoints ; i++ ){
//	      str.Format(_T("%d"),i);
 //	      pDC->TextOut(m_points[i].x,m_points[i].y,str);
      }
      //
      pDC->SelectObject(previusBrush);
   }else{
      pDC->MoveTo(m_points[0]);
      for( int i=1 ; i < m_nPoints ; i++ )
         pDC->LineTo(m_points[i]);
   }
   pDC->SelectObject(previusPen);
}

/////////////////////////////////////////////////////////////////////////////
// CPolyTryView printing

BOOL CPolyTryView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CPolyTryView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CPolyTryView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CPolyTryView diagnostics

#ifdef _DEBUG
void CPolyTryView::AssertValid() const
{
	CView::AssertValid();
}

void CPolyTryView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CPolyTryDoc* CPolyTryView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPolyTryDoc)));
	return (CPolyTryDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CPolyTryView message handlers

void CPolyTryView::OnUpdateEditPolygonalize(CCmdUI* pCmdUI) 
{
      pCmdUI->Enable( !m_bFlushFaces  && m_nPoints > 2 );
}

void CPolyTryView::OnEditPolygonalize() 
{
      m_bFlushFaces        = true;
      m_points[m_nPoints++]= m_points[0];
      InvalidateRect(NULL,TRUE);
}

void CPolyTryView::OnLButtonUp(UINT nFlags, CPoint point) 
{
      if( m_bFlushFaces ){
         m_bFlushFaces  = false;
         m_nPoints      = 0;
      }
      if( m_nPoints < 99 )
         m_points[m_nPoints++]   = point;
      //
      InvalidateRect(NULL,TRUE);
      //
	   CView::OnLButtonUp(nFlags, point);
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Peppino Sbargzeguti
United States United States
No Biography provided

You may also be interested in...

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160721.1 | Last Updated 7 Feb 2002
Article Copyright 2002 by Peppino Sbargzeguti
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid