void MFCSimpleTypeView::ContextMenu(UINT nFlags, CPoint point) { long caty[] = { // TypedValue::S_DOUBLE, // TypedValue::S_LAMBDA, TypedValue::S_FLOAT, TypedValue::S_INT, TypedValue::S_SHORT, TypedValue::S_BYTE, TypedValue::S_BOOL }; CPoint popPt = point; ClientToScreen(&popPt); CMenu *ctxtMenu = new CMenu; ctxtMenu->CreatePopupMenu(); CMenu *addVarMenu = new CMenu; addVarMenu->CreatePopupMenu(); char buf[512]; long item = ItemAtPoint(point); for (short i=0; i<sizeof(caty)/sizeof(caty[0]); i++) { if (ID_VARIABLECONTEXT_ADD_VAR + caty[i] > ID_VARIABLECONTEXT_ADD_VAR_TYPE_RANGE) { reportError("Internal error. type index value exceeded in menu creator, is %d and shouldn't exceed %d", caty[i], ID_VARIABLECONTEXT_ADD_VAR_TYPE_RANGE-ID_VARIABLECONTEXT_ADD_VAR); } else { string tnm = findTypeName(caty[i]); if (tnm.size()) { sprintf(buf, "%s", tnm.c_str()); addVarMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_ADD_VAR + caty[i], buf); } } } ctxtMenu->AppendMenu(MF_POPUP, (UINT) addVarMenu->m_hMenu, "add variable"); ctxtMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_ADD_METHOD, "add method"); StabEnt *itemSym = NULL; if (item >= 0) { // delete selected item // set selected item envelope // set selected item display type // set selected item length ... to create an array itemSym = SymForItem(item); if (itemSym != NULL) { CMenu *setVarTypeMenu = new CMenu; setVarTypeMenu->CreatePopupMenu(); for (short i=0; i<sizeof(caty)/sizeof(caty[0]); i++) { if (ID_VARIABLECONTEXT_SET_VAR_TYPE + caty[i] > ID_VARIABLECONTEXT_SET_VAR_TYPE_RANGE) { reportError("Internal error. type index value exceeded in menu creator, is %d and shouldn't exceed %d", caty[i], ID_VARIABLECONTEXT_SET_VAR_TYPE_RANGE-ID_VARIABLECONTEXT_SET_VAR_TYPE); } else { string tnm = findTypeName(caty[i]); if (tnm.size() && itemSym->type != caty[i]) { sprintf(buf, "%s", tnm.c_str()); setVarTypeMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_SET_VAR_TYPE + caty[i], buf); } } } sprintf(buf, "set '%s' type", itemSym->uniqueName()); ctxtMenu->AppendMenu(MF_POPUP, (UINT) setVarTypeMenu->m_hMenu, buf); sprintf(buf, "delete '%s'", itemSym->uniqueName()); ctxtMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_DELETE_SELECTED, buf); sprintf(buf, "set '%s' envelope", itemSym->uniqueName()); ctxtMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_ENVELOPE_SELECTED, buf); CMenu *dispVarMenu = new CMenu; dispVarMenu->CreatePopupMenu(); dispVarMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_NODISPLAY_SELECTED, "none"); dispVarMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_CONTROL_SELECTED, "control"); dispVarMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_DISPLAY_SELECTED, "display"); sprintf(buf, "set '%s' display", itemSym->uniqueName()); ctxtMenu->AppendMenu(MF_POPUP, (UINT) dispVarMenu->m_hMenu, buf); ctxtMenu->AppendMenu(MF_STRING, ID_VARIABLECONTEXT_SET_LENGTH_SELECTED, "set length"); } } // add item // by type // structures ???? short ret = ctxtMenu->TrackPopupMenuEx( TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RETURNCMD, popPt.x, popPt.y, this, NULL); if (ret >= ID_VARIABLECONTEXT_ADD_VAR && ret <= ID_VARIABLECONTEXT_ADD_VAR_TYPE_RANGE) { long typ = ret - ID_VARIABLECONTEXT_ADD_VAR; if (parent && parent->Symbol()) { StabEnt *pSym = parent->Symbol(); Stackable *stkbl = pSym->StackableValue(); if (stkbl) { char *vnm = "variable%d"; switch(typ) { case TypedValue::S_BYTE: vnm = "bytevar"; break; case TypedValue::S_SHORT: vnm = "wordvar"; break; case TypedValue::S_INT: vnm = "intvar"; break; case TypedValue::S_LONG: vnm = "longvar"; break; case TypedValue::S_FLOAT: vnm = "floatvar"; break; } string nmbuf = glob.makeUniqueName(pSym, vnm, 1); StabEnt *nsym=DefineSymbol(nmbuf, typ, 0, 0, pSym, TypedValue::REF_STACK, false, false, StabEnt::DISPLAY_NOT); stkbl->ReAllocateChildren(); AddSym(nsym); } } } else if (ret == ID_VARIABLECONTEXT_ADD_METHOD) { if (parent && parent->Symbol()) { StabEnt *pSym = parent->Symbol(); string nmbuf = glob.makeUniqueName(pSym, "action", 1); QuaPerceptualSet *quaLink=parent->QuaLink(); if (quaLink) { StabEnt *mSym = quaLink->CreateMethod(nmbuf, pSym); if (mSym) { AddSym(mSym); fprintf(stderr, "tried to add method element\n"); } } } } else if (ret >= ID_VARIABLECONTEXT_SET_VAR_TYPE && ret <= ID_VARIABLECONTEXT_SET_VAR_TYPE_RANGE) { long typ = ret - ID_VARIABLECONTEXT_SET_VAR_TYPE; if (itemSym && parent && parent->Symbol()) { StabEnt *pSym = parent->Symbol(); Stackable *stkbl = pSym->StackableValue(); if (stkbl) { bool validChange = false; switch(typ) { case TypedValue::S_BYTE: validChange = true; break; case TypedValue::S_SHORT: validChange = true; break; case TypedValue::S_INT: validChange = true; break; case TypedValue::S_LONG: validChange = true; break; case TypedValue::S_FLOAT: validChange = true; break; } if (validChange) { itemSym->type = typ; stkbl->ReAllocateChildren(); } } } } else if (ret == ID_VARIABLECONTEXT_DELETE_SELECTED) { if (itemSym) { glob.DeleteSymbol(itemSym, true); RemoveSym(itemSym); if (parent && parent->Symbol()) { StabEnt *pSym = parent->Symbol(); Stackable *stkbl = pSym->StackableValue(); if (stkbl) { stkbl->ReAllocateChildren(); } } } } else if (ret == ID_VARIABLECONTEXT_ENVELOPE_SELECTED) { if (itemSym) { itemSym->SetEnvelopeMode(true); } } else if (ret == ID_VARIABLECONTEXT_NODISPLAY_SELECTED) { if (itemSym) { itemSym->SetDisplayMode(StabEnt::DISPLAY_NOT); // forces redisplay of this entry to show icon change GetListCtrl().SetItemText(item, 3, "N"); } } else if (ret == ID_VARIABLECONTEXT_DISPLAY_SELECTED) { if (itemSym) { itemSym->SetDisplayMode(StabEnt::DISPLAY_DISP); // forces redisplay of this entry GetListCtrl().SetItemText(item, 3, "D"); } } else if (ret == ID_VARIABLECONTEXT_CONTROL_SELECTED) { if (itemSym) { itemSym->SetDisplayMode(StabEnt::DISPLAY_CTL); // forces redisplay of this entry GetListCtrl().SetItemText(item, 3, "C"); } } else if (ret == ID_VARIABLECONTEXT_SET_LENGTH_SELECTED) { reportError("Currently only undimensioned data are supported by this interface .... but they can be added manually by hand-editting the script"); } }
void geonDetector::detect(pcl::SacModel geonType) { seg.setOptimizeCoefficients (true); seg.setNormalDistanceWeight (0.3); seg.setMethodType (pcl::SAC_RANSAC); seg.setMaxIterations (100); seg.setDistanceThreshold (0.05); seg.setInputCloud (cloud_filtered); seg.setInputNormals (cloud_normals); seg.setModelType (geonType); //Type specific parameters if(geonType == pcl::SACMODEL_PLANE) { seg.setNormalDistanceWeight (0.5); seg.setDistanceThreshold (0.08); } if(geonType == pcl::SACMODEL_CYLINDER) { seg.setNormalDistanceWeight (0.1); seg.setDistanceThreshold (0.05); } //perform the segmentation, aka detection seg.segment (*geonIndices, *coefficients); std::cerr << geonType << "coefficients: " << *coefficients << std::endl; //if no geon is found, return directly. if(geonIndices->indices.size()==0) { return; } //increase total number of found geons. this->totalCount++; // Remove the inlier, extract the rest extract.setInputCloud(cloud_filtered); extract.setIndices(geonIndices); extract.setNegative (true); extract.filter (*cloud_filtered2); extract_normals.setInputCloud(cloud_normals); extract_normals.setIndices(geonIndices); extract_normals.setNegative (true); extract_normals.filter (*cloud_normals2); // Write the inliers to disk pcl::PointCloud<PointT>::Ptr cloud_geon(new pcl::PointCloud<PointT> ()); extract.setNegative(false); extract.filter (*cloud_geon); std::cerr << "PointCloud representing the planar component: " << cloud_geon->points.size () << " data points." << std::endl; std::stringstream geonPath; geonPath << findTypeName(geonType) << "_" << totalCount << ".pcd"; writer.write (geonPath.str().c_str(), *cloud_geon, false); // writer.write ("geon.pcd", *cloud_geon, false); //copy cloud_filtered2 to cloud_filtered //pcl::copyPointCloud(*cloud_filtered2,*cloud_filtered); //pcl::copyPointCloud(*cloud_normals2,*cloud_normals); }
void MFCSimpleTypeView::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { int m_bClientWidthSel = TRUE; int m_cxClient = 0; int m_cxStateImageOffset = 0; COLORREF m_clrText = ::GetSysColor(COLOR_WINDOWTEXT); COLORREF m_clrTextBk = ::GetSysColor(COLOR_WINDOW); COLORREF m_clrBkgnd = ::GetSysColor(COLOR_WINDOW); CListCtrl& listCtrl=GetListCtrl(); CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rcItem(lpDrawItemStruct->rcItem); UINT uiFlags = ILD_TRANSPARENT; CImageList* pImageList; int nItem = lpDrawItemStruct->itemID; BOOL bFocus = (GetFocus() == this); COLORREF clrTextSave, clrBkSave; COLORREF clrImage = m_clrBkgnd; static _TCHAR szBuff[MAX_PATH]; LPCTSTR pszText; StabEnt *itemSym = SymForItem(nItem); // get item data LV_ITEM lvi; lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE; lvi.iItem = nItem; lvi.iSubItem = 0; lvi.pszText = szBuff; lvi.cchTextMax = sizeof(szBuff); lvi.stateMask = 0xFFFF; // get all state flags listCtrl.GetItem(&lvi); BOOL bSelected = (bFocus || (GetStyle() & LVS_SHOWSELALWAYS)) && lvi.state & LVIS_SELECTED; bSelected = bSelected || (lvi.state & LVIS_DROPHILITED); // set colors if item is selected CRect rcAllLabels; listCtrl.GetItemRect(nItem, rcAllLabels, LVIR_BOUNDS); CRect rcLabel; listCtrl.GetItemRect(nItem, rcLabel, LVIR_BOUNDS); // listCtrl.GetItemRect(nItem, rcLabel, LVIR_LABEL); rcAllLabels.left = rcLabel.left; if (m_bClientWidthSel && rcAllLabels.right<m_cxClient) rcAllLabels.right = m_cxClient; if (bSelected) { clrTextSave = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); clrBkSave = pDC->SetBkColor(::GetSysColor(COLOR_HIGHLIGHT)); pDC->FillRect(rcAllLabels, &CBrush(::GetSysColor(COLOR_HIGHLIGHT))); } else pDC->FillRect(rcAllLabels, &CBrush(m_clrTextBk)); // set color and mask for the icon if (lvi.state & LVIS_CUT) { clrImage = m_clrBkgnd; uiFlags |= ILD_BLEND50; } else if (bSelected) { clrImage = ::GetSysColor(COLOR_HIGHLIGHT); uiFlags |= ILD_BLEND50; } // draw state icon UINT nStateImageMask = lvi.state & LVIS_STATEIMAGEMASK; if (nStateImageMask) { int nImage = (nStateImageMask>>12) - 1; pImageList = listCtrl.GetImageList(LVSIL_STATE); if (pImageList) { pImageList->Draw(pDC, nImage, CPoint(rcItem.left, rcItem.top), ILD_TRANSPARENT); } } // draw normal and overlay icon /* CRect rcIcon; ListCtrl.GetItemRect(nItem, rcIcon, LVIR_ICON); pImageList = listCtrl.GetImageList(LVSIL_SMALL); if (pImageList) { UINT nOvlImageMask=lvi.state & LVIS_OVERLAYMASK; if (rcItem.left<rcItem.right-1) { ImageList_DrawEx(pImageList->m_hImageList, lvi.iImage, pDC->m_hDC,rcIcon.left,rcIcon.top, 16, 16, m_clrBkgnd, clrImage, uiFlags | nOvlImageMask); } } */ // draw item label // listCtrl.GetItemRect(nItem, rcItem, LVIR_LABEL); LV_COLUMN lvc; lvc.mask = LVCF_FMT | LVCF_WIDTH; listCtrl.GetItemRect(nItem, rcItem, LVIR_BOUNDS); listCtrl.GetColumn(0, &lvc); rcItem.right = lvc.cx; // pszText = MakeShortString(pDC, szBuff, // rcItem.right-rcItem.left, 2*OFFSET_FIRST); pszText = szBuff; rcLabel = rcItem; rcLabel.left += OFFSET_FIRST; rcLabel.right -= OFFSET_FIRST; pDC->SetTextColor(rgb_black); pDC->DrawText(pszText,-1,rcLabel,DT_LEFT | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER); // draw labels for extra columns if (itemSym) { UINT nOvlImageMask=lvi.state & LVIS_OVERLAYMASK; // type listCtrl.GetColumn(1, &lvc); rcItem.left = rcItem.right; rcItem.right += lvc.cx; rcLabel = rcItem; rcLabel.left += OFFSET_OTHER; rcLabel.right -= OFFSET_OTHER; string tnm = findTypeName(itemSym->type); if (tnm.size()) { pDC->SetTextColor(rgb_blue); long h = pDC->DrawText(tnm.c_str() , -1, rcLabel, DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER); } // length listCtrl.GetColumn(2, &lvc); rcItem.left = rcItem.right; rcItem.right += lvc.cx; // fprintf(stderr, "%d %d %d\n", pszText, itemSym->type, lvc.cx); rcLabel = rcItem; rcLabel.left += OFFSET_OTHER; rcLabel.right -= OFFSET_OTHER; if (itemSym->indirection > 0) { char buf[120]; buf[0] = 0; for (short i=1; i<itemSym->indirection; i++) { char nbuf[10]; sprintf(nbuf, "%s%d", i>1?",":"",itemSym->size[i]); strcat(buf, nbuf); } pDC->SetTextColor(rgb_blue); pDC->DrawText(buf, -1, rcLabel, DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER); } // controller listCtrl.GetColumn(3, &lvc); rcItem.left = rcItem.right; rcItem.right += lvc.cx; if (itemSym->controlMode != StabEnt::DISPLAY_NOT) { ImageList_DrawEx(images, itemSym->controlMode == StabEnt::DISPLAY_CTL ? 0 : itemSym->controlMode == StabEnt::DISPLAY_DISP? 2 : 0, pDC->m_hDC,rcItem.left,rcItem.top, 16, 16, m_clrBkgnd, clrImage, uiFlags | nOvlImageMask); } // envelope listCtrl.GetColumn(4, &lvc); rcItem.left = rcItem.right; rcItem.right += lvc.cx; if (itemSym->isEnveloped) { ImageList_DrawEx(images, 1 /* which one */, pDC->m_hDC,rcItem.left,rcItem.top, 16, 16, m_clrBkgnd, clrImage, uiFlags | nOvlImageMask); } } /* for(int nColumn = 1; listCtrl.GetColumn(nColumn, &lvc); nColumn++) { rcItem.left = rcItem.right; rcItem.right += lvc.cx; int nRetLen = listCtrl.GetItemText(nItem, nColumn, szBuff, sizeof(szBuff)); if (nRetLen == 0) continue; // pszText = MakeShortString(pDC, szBuff, // rcItem.right - rcItem.left, 2*OFFSET_OTHER); pszText = szBuff; UINT nJustify = DT_LEFT; if(pszText == szBuff) { switch(lvc.fmt & LVCFMT_JUSTIFYMASK) { case LVCFMT_RIGHT: nJustify = DT_RIGHT; break; case LVCFMT_CENTER: nJustify = DT_CENTER; break; default: break; } } rcLabel = rcItem; rcLabel.left += OFFSET_OTHER; rcLabel.right -= OFFSET_OTHER; pDC->DrawText(pszText, -1, rcLabel, nJustify | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER); }*/ // draw focus rectangle if item has focus if (lvi.state & LVIS_FOCUSED && bFocus) pDC->DrawFocusRect(rcAllLabels); // set original colors if item was selected if (bSelected) { pDC->SetTextColor(clrTextSave); pDC->SetBkColor(clrBkSave); } }