资源简介

直线、圆、多边形 这是针对09年所写计算机图形学源码重构后的版本。新版本在实现用多种算法生成直线、圆、多边形等图形图像的同时,使用了双缓存绘图防止图像闪烁,并使用自定义结构扫描线存储所绘连块图形区域提高了二次绘图效率。 同时将所有图形图像封装成类,便于图形的重绘以及旋转、平移、缩放、对称变换等几何操作。 这是真正意义上实现了二维图层操作,而不是一个演示性的算法。 光照实验与消隐借用已有代码,因此代码变量命名风格与之前的不统一。

资源截图

代码片段和文件信息

#include “StdAfx.h“
#include “shape.h“
#include “Math.h“
#ifndef AFX_CIRCLE_kHaXxGHcA3eTghZD5EHQF3FyVkZVwmcZNDbv5EUvsCMwMDOPZGcHlnR_LP10VelGTFBsb3ZlTEc_0722_03_21_141320211_
#define AFX_CIRCLE_kHaXxGHcA3eTghZD5EHQF3FyVkZVwmcZNDbv5EUvsCMwMDOPZGcHlnR_LP10VelGTFBsb3ZlTEc_0722_03_21_141320211_

IMPLEMENT_SERIAL(CCircleCShape1)
//构造函数初始化各类参数
CCircle::CCircle(CPoint pCenter CPoint pEdge int Width int styleBOOL bFill COLORREF pColorCOLORREF fillColor)
{
m_pCenter=pCenter;m_pEdge=pEdge;m_pWidth=Width;m_nstyle=style;m_pColor=pColor;m_FillColor=fillColor;
m_bIsSelected = FALSE;
m_bIsAutoFilled = bFill;
}

//序列化
void CCircle::Serialize(CArchive& ar)
{
if(ar.IsStoring())
ar<yle;
else
ar>>m_pCenter.x>>m_pCenter.y>>m_pEdge.x>>m_pEdge.y>>m_nstyle;
CShape::Serialize(ar);
}

void CCircle::Drawing(CDC *pDC)
{
COLORREF colorPenSave = m_pColor;
COLORREF colorFillSave = m_FillColor;
if (m_bIsSelected)
{
m_pColor = RGB(200200200); //显示选中
m_FillColor = RGB(200200200); //显示选中
}

if(m_bIsAutoFilled)
FillCirCle(pDC);

switch (m_nstyle)
{
case MID_CIRCLE:MIDCircle(pDC);break;
case PLUSMINUS_CIRCLE:PlusMinusCircle(pDC);break;
case BRESENHAM_CIRCLE:BresenHamCircle(pDC);break;
default:break;
}

m_pColor = colorPenSave;
m_FillColor = colorFillSave;

}

void CCircle::SavePoint()
{
m_pCenterSave =m_pCenter;
m_pEdgeSave = m_pEdge;
}

CRect CCircle::GetBoundaryRect()
{
CRect rect;
int r=(int)sqrt((m_pCenter.x-m_pEdge.x)*(m_pCenter.x-m_pEdge.x)
+(m_pCenter.y-m_pEdge.y)*(m_pCenter.y-m_pEdge.y));
rect.left = m_pCenter.x - r;
rect.right= m_pCenter.x + r;
rect.top= m_pCenter.y - r;
rect.bottom= m_pCenter.y + r;
return rect;
}

void CCircle::MIDCircle(CDC *pDC)
{
int rxdydeltaxdeltayx0y0iiiii;
CPen PenNew(PS_SOLID1m_pColor) * pOldPen;//设置画笔
CBrush Brh(m_pColor) *pOldBrh; //设置笔刷
pDC->SetROP2(R2_COPYPEN);    //绘图方法为直接画
pOldPen = pDC->Selectobject(&PenNew);
pOldBrh = pDC->Selectobject(&Brh);
    r=(int)sqrt((m_pCenter.x-m_pEdge.x)*(m_pCenter.x-m_pEdge.x)
+(m_pCenter.y-m_pEdge.y)*(m_pCenter.y-m_pEdge.y));
x=0;y=r;
deltax=3;deltay=2-r-r;d=1-r;x0=m_pCenter.x;y0=m_pCenter.y;
ii=m_pWidth/2;iii=(m_pWidth+1)/2;
while(x<=y)
{
if(m_pWidth==1)    //线宽为1时候用点划
{
pDC->SetPixel(x+x0y+y0m_pColor);
pDC->SetPixel(-x+x0y+y0m_pColor);
pDC->SetPixel(x+x0-y+y0m_pColor);
pDC->SetPixel(-x+x0-y+y0m_pColor);
pDC->SetPixel(y+x0x+y0m_pColor);
pDC->SetPixel(-y+x0x+y0m_pColor);
pDC->SetPixel(y+x0-x+y0m_pColor);
pDC->SetPixel(-y+x0-x+y0m_pColor);
}
else
if(m_pWidth!=1) //线宽不为1时候用圆画
{
pDC->Ellipse(x+x0-iiy+y0-iix+x0+iiiy+y0+iii);
pDC->Ellipse(-x+x0-iiy+y0-ii-x+x0+iiiy+y0+iii);
pDC->Ellipse(x+x0-ii-y+y0-iix+x0+iii-y+y0+iii);
pDC->Ellipse(-x+x0-ii-y+y0-ii-x+x0+iii-y+y0+iii);
pDC->Ellipse(y+x0-ii

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7298  2011-07-20 14:01  ComputerGraphic\Circle.cpp

     文件       6825  2011-07-20 14:01  ComputerGraphic\CircleSetDlg.cpp

     文件       1853  2011-07-20 14:01  ComputerGraphic\CircleSetDlg.h

     文件       4371  2011-07-20 14:01  ComputerGraphic\ComputerGraphic.cpp

     文件       6521  2011-07-20 14:01  ComputerGraphic\ComputerGraphic.dsp

     文件        555  2011-07-20 14:01  ComputerGraphic\ComputerGraphic.dsw

     文件       1449  2011-07-20 14:01  ComputerGraphic\ComputerGraphic.h

     文件     123904  2011-07-20 14:47  ComputerGraphic\ComputerGraphic.ncb

     文件      53760  2011-07-20 14:47  ComputerGraphic\ComputerGraphic.opt

     文件       3246  2011-07-20 14:14  ComputerGraphic\ComputerGraphic.plg

     文件      22039  2011-07-20 14:01  ComputerGraphic\ComputerGraphic.rc

     文件       2296  2011-07-20 14:01  ComputerGraphic\ComputerGraphicDoc.cpp

     文件       1623  2011-07-20 14:01  ComputerGraphic\ComputerGraphicDoc.h

     文件      56135  2011-07-20 14:01  ComputerGraphic\ComputerGraphicView.cpp

     文件       6032  2011-07-20 14:01  ComputerGraphic\ComputerGraphicView.h

     文件       7602  2011-07-20 14:01  ComputerGraphic\DrawDlg.cpp

     文件       1756  2011-07-20 14:01  ComputerGraphic\DrawDlg.h

     文件       1878  2011-07-20 14:01  ComputerGraphic\EditEx.cpp

     文件       1304  2011-07-20 14:01  ComputerGraphic\EditEx.h

     文件      10806  2011-07-20 14:01  ComputerGraphic\line.cpp

     文件       4229  2011-07-20 14:01  ComputerGraphic\LineSetDlg.cpp

     文件       1673  2011-07-20 14:01  ComputerGraphic\LineSetDlg.h

     文件       3203  2011-07-20 14:01  ComputerGraphic\MainFrm.cpp

     文件       1551  2011-07-20 14:01  ComputerGraphic\MainFrm.h

     文件       1232  2011-07-20 14:01  ComputerGraphic\Matirx.h

     文件       2579  2011-07-20 14:01  ComputerGraphic\MyFace.h

     文件       5028  2011-07-20 14:01  ComputerGraphic\Polygon.cpp

     文件       4535  2011-07-20 14:01  ComputerGraphic\ReadMe.txt

     文件        766  2011-07-09 17:34  ComputerGraphic\res\3dsmove.cur

     文件       3262  2011-07-10 04:32  ComputerGraphic\res\4.cur

............此处省略26个文件信息

评论

共有 条评论