示例#1
0
文件: place.cpp 项目: junjiek/Placer
myPoint myPlacement::getOrigin(InstTerm& it) {
	Inst* inst = getInst(it);
	long cx = inst->getCenterX();
	long cy = inst->getCenterY();
	long ox = it.getOffsetX();
	long oy = it.getOffsetY();

	switch(inst->getOrient()){
	case kR0:
		return myPoint(cx + ox, cy + oy);
	case kR90:
		return myPoint(cx + oy, cy - ox);
	case kR180:
		return myPoint(cx - ox, cy - oy);
	case kR270:
		return myPoint(cx - oy, cy + ox);
	case kMY:
		return myPoint(cx - ox, cy + oy);
	case kMYR90:
		return myPoint(cx + oy, cy + ox);
	case kMX:
		return myPoint(cx + ox, cy - oy);
	case kMXR90:
		return myPoint(cx - oy, cy - ox);
	default:
		cout<<"unknown orientation!!!"<<endl;
		return myPoint(0,0);
	}

	return myPoint(cx, cy);
}
示例#2
0
文件: place.cpp 项目: junjiek/Placer
myPoint myPlacement::getOrigin(InstTerm* it) {
	Inst* inst = getInst(it);
	long cx = inst->getCenterX();
	long cy = inst->getCenterY();
	long ox = it->getOffsetX();
	long oy = it->getOffsetY();
	return myPoint(cx + ox, cy + oy);
}
myCircle::myCircle(myPoint p1, myPoint p2, int alg)
{
    x=p1.x;
    y=p1.y;
    Center = myPoint(x,y);

    R = (int)sqrt( pow((p1.x-p2.x),2) +pow((p1.y-p2.y),2) );
    drawingAlgorithm = alg;
}
示例#4
0
文件: Obj.cpp 项目: almgwary/Graphic
void Obj::Draw(HDC hdc)
{
     if(shape == 1)              //  Line Algorithms 
     {
              l = myLine(p1,p2,algorithm);
              l.color = color;
              l.drawLine(hdc);
     }
     else if(shape == 2)       //  Circle Algorithms 
     {
          int dx = p1.x-p2.x;
          int dy = p1.y-p2.y;
          int r = (int)sqrt(dx*dx + dy*dy);
          c = myCircle(p1,r,algorithm);
          c.color = color;
          c.drawCircle(hdc);
     }
        else if(shape == 3)    //  Curve Algorithms 
     {
          curve.color = color;
          curve.Points[0] = p1;
          curve.Points[1] = p2;
          curve.Points[2] = myPoint(x3,y3);
          curve.Points[3] = myPoint(x4,y4);
          if(algorithm == 1)
                 curve.DrawHermiteCurve(hdc,p1.x,p1.y,p2.x,p2.y,x3,y3,x4,y4,100);
          if(algorithm == 2)
                 curve.DrawBezierCurve(hdc,curve.Points[0],curve.Points[1],curve.Points[2],curve.Points[3],100);
          if(algorithm == 3)
                 curve.DrawCardinalSpline(hdc,curve.Points,4,0.01,100);
     }
     else if(shape == 4)      //  Clipping Algorithms 
     {
          if(algorithm == 1)
                       clip.PointClipping(hdc,p1.x,p1.y,left,top,right,bottom,color);
          if(algorithm == 2)
                       clip.LineClipping(hdc,p1.x,p1.y,p2.x,p2.y,left,top,right,bottom);
          if(algorithm == 3)
                      {clip.PolygonClipping(hdc,Points,n,left,top,right,bottom);}
     }
}
示例#5
0
::fwData::Mesh::Id Mesh::addPoint(::fwData::Mesh::PointValueType* pt,
                                  ::fwDataTools::helper::Mesh::sptr meshHelper,
                                  PointsMapType& points)
{
    ::fwDataTools::Point myPoint(pt[0], pt[1], pt[2]);

    PointsMapType::iterator it = points.find(myPoint);
    if(it != points.end())
    {
        return it->second;
    }
    ::fwData::Mesh::Id idx = meshHelper->insertNextPoint(pt[0], pt[1], pt[2]);
    points[myPoint]        = idx;
    return idx;
}
示例#6
0
 //pont számmal való szorzása
 myPoint operator*(const double rhs) const
 {
     return myPoint(rhs*this->getX(), rhs*this->getY());
 }
示例#7
0
 //pontok összeadása
 myPoint operator+(const myPoint& rhs)
 {
     return myPoint(this->getX() + rhs.getX(), this->getY() + rhs.getY());
 }
示例#8
0
void CImgClassCBView::LoadThumbNail1(int iCls, bool bCorrect[], int iImgs_per_Cls[])
{
	CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd();
	CImgClassCBView* pView1;
	CImgClassCBDoc* pDoc1;
	pView1 = pFrame->m_pTestView;
	pDoc1 = pView1->GetDocument();
	CListCtrl& ListCtrl1=pView1->GetListCtrl();
	CImageList* pImgList1 = &pView1->m_ImageListThumb;
	int i;
	for(i=0; i<pImgList1->GetImageCount(); i++)
		pImgList1->Remove(i);	
	ListCtrl1.DeleteAllItems();
	pImgList1->SetImageCount(pDoc1->m_vImgNameTest.size());
	TCHAR path1[MAX_PATH];
	vector<CString>::iterator iter1;
	ListCtrl1.SetRedraw(FALSE);
	int nIndex1 = 0;
	for(iter1=pDoc1->m_vImgNameTest.begin(); 
			iter1!=pDoc1->m_vImgNameTest.end();
			iter1++, nIndex1++)
	{
		ListCtrl1.InsertItem(nIndex1, *iter1, nIndex1);
	}
	ListCtrl1.SetRedraw(TRUE);
	ListCtrl1.Invalidate();
	
	//Load Error Tag Img:
	CString szErrTag = "res\\err.png";
	CString szCorTag = "res\\cor.png";
	TCHAR path[MAX_PATH]={0};
	_stprintf(path, _T("%s"),szErrTag.GetBuffer(0));
	int nImageTypeErr=pDoc1->GetTypeFromFileName(path);
	CxImage imageErr(path, nImageTypeErr);
	_stprintf(path, _T("%s"),szCorTag.GetBuffer(0));
	nImageTypeErr=pDoc1->GetTypeFromFileName(path);
	CxImage imageCor(path, nImageTypeErr);
	if(imageErr.IsValid()==false || imageErr.IsValid()==false )
	{
		return;
	}
	////////////////////

	HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 192, 192));
	HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255));
	
	// Border Size
	RECT rcBorder;
	rcBorder.left=rcBorder.top=0;
	rcBorder.right=THUMBNAIL_WIDTH;
	rcBorder.bottom=THUMBNAIL_HEIGHT;
	
	const float fRatio=(float)THUMBNAIL_HEIGHT/THUMBNAIL_WIDTH;
	
	int XDest, YDest, nDestWidth, nDestHeight;
	
	nIndex1=0;

	for(iter1 = pDoc1->m_vImgNameTest.begin();
		iter1 != pDoc1->m_vImgNameTest.end(); 
		iter1 ++, nIndex1 ++)
	{
		// Load Image File
		_stprintf(path1, _T("%s\\%s"), pDoc1->m_strCurrentDirectory, *iter1);
		
		int nImageType=pDoc1->GetTypeFromFileName(path1);
		if(nImageType==CXIMAGE_FORMAT_UNKNOWN)
			continue;
		
		CxImage image(path1, nImageType);
		
		if(image.IsValid()==false)
			continue;
		
		// Calculate Rect to fit to canvas
		const float fImgRatio=(float)image.GetHeight()/image.GetWidth();
		if(fImgRatio > fRatio)
		{
			nDestWidth=THUMBNAIL_HEIGHT/fImgRatio;
			XDest=(THUMBNAIL_WIDTH-nDestWidth)/2;
			YDest=0;
			nDestHeight=THUMBNAIL_HEIGHT;
		}
		else
		{
			XDest=0;
			nDestWidth=THUMBNAIL_WIDTH;
			nDestHeight=THUMBNAIL_WIDTH*fImgRatio;
			YDest=(THUMBNAIL_HEIGHT-nDestHeight)/2;
		}
		
		//HBRUSH hBrushBorder=::CreateSolidBrush(RGB(192, 1, 192));
		//HBRUSH hBrushBk=::CreateSolidBrush(RGB(255, 255, 255));
		HBRUSH hBrushBkErr=::CreateSolidBrush(RGB(155, 0, 0));
		HBRUSH hBrushBkCor=::CreateSolidBrush(RGB(0, 190, 0));
		CClientDC cdc(pView1);
		HDC hDC=::CreateCompatibleDC(cdc.m_hDC);
        //建立与pView显示设备兼容的位图
		HBITMAP bm = CreateCompatibleBitmap(cdc.m_hDC, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT);
        //HBITMAP bm2 = CreateCompatibleBitmap(cdc.m_hDC, THUMBNAIL_WIDTH_MASK, THUMBNAIL_HEIGHT_MASK);
		HBITMAP pOldBitmapImage = (HBITMAP)SelectObject(hDC,bm);
		// Draw Background

		::FillRect(hDC, &rcBorder, hBrushBk);
		//::FillRect(hDC, &rcBorderInside, hBrushBk);
		
		// Draw Image
		image.Stretch(hDC, XDest + 2, YDest + 2, nDestWidth - 4, nDestHeight - 4);
		
		// Draw Border
		//::FrameRect(hDC, &rcBorderInside, hBrushBorder);
		
		SelectObject(hDC, pOldBitmapImage);
		
		// Attach to Bitmap and Replace image in CImageList
		CBitmap bitmap;
		bitmap.Attach(bm);
		pImgList1->Replace(nIndex1, &bitmap, NULL);
		
		// Redraw only a current item for removing flickering and fast speed.
		ListCtrl1.RedrawItems(nIndex1, nIndex1);
		
		///////////////////////////////////////////////////////////////////////////
		//对标号不对的图片进行标记(正确的打对号)
		CxImage *pImg;
		int iImgNo = iImgs_per_Cls[nIndex1];
		if(!bCorrect[iImgNo / 100 * 50 + iImgNo % 50])
			pImg = &imageErr;
		else pImg = &imageCor;
		HBITMAP bmErr = CreateCompatibleBitmap(cdc.m_hDC, THUMBNAIL_WIDTH_MASK, THUMBNAIL_HEIGHT_MASK);
		HBITMAP pOldBitmapImageErr = (HBITMAP)SelectObject(hDC,bmErr);
		::FillRect(hDC, &rcBorder, hBrushBk);
		pImg->AlphaSet(100); 
		pImg->Stretch(hDC, 0, 0, THUMBNAIL_WIDTH_MASK, THUMBNAIL_HEIGHT_MASK);
		SelectObject(hDC, pOldBitmapImage);
		CBitmap bitmapErr;
		bitmapErr.Attach(bmErr);//将位图贴到ImageList控件上
		pImgList1->Replace(nIndex1, &bitmapErr, NULL);
		pImgList1->SetOverlayImage(nIndex1,1);
		CPoint myPoint(XDest,YDest);
		pImgList1->Draw((CDC*)&hDC, 0, myPoint, INDEXTOOVERLAYMASK(1));
		ListCtrl1.RedrawItems(nIndex1, nIndex1);
		DeleteObject(bmErr);

///////////////////////////////////////////////////////////////////////////

		// Release used DC and Object
		DeleteDC(hDC);
		DeleteObject(bm);
		DeleteObject(hBrushBkErr);
		DeleteObject(hBrushBkCor);
	}
	DeleteObject(hBrushBorder);
	DeleteObject(hBrushBk);

	ListCtrl1.Invalidate();

	return;
}
示例#9
0
myLine::myLine(int x1, int y1, int x2, int y2)
{
	startPoint = myPoint(x1,y1);
	endPoint = myPoint(x2,y2);
	drawingAlgorithm = 0;
}
myCircle::myCircle()
{
                             Center = myPoint(0,0);
                             R = 0;
                             drawingAlgorithm = 0;
}