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); }
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; }
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);} } }
::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; }
//pont számmal való szorzása myPoint operator*(const double rhs) const { return myPoint(rhs*this->getX(), rhs*this->getY()); }
//pontok összeadása myPoint operator+(const myPoint& rhs) { return myPoint(this->getX() + rhs.getX(), this->getY() + rhs.getY()); }
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; }
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; }