示例#1
0
bool GeoMapEditor::addMouseObject( // пытаемся добавить новый объект вытянув или кликнув мышкой
    cv::Rect& rect, // note: in-out -- подкручиваем ректангл по законам первого рождения для данного объекта
    int flags )
{
  
  if (objType() == "AGM_Segm")
  {
    Point xyTL = rect.tl();
    Point xyBR = rect.br();
    GeoSheet& sh = gm.sheets[ cur_sheet ];
    Point2d enTL = sh.xy2en( xyTL );
    Point2d enBR = sh.xy2en( xyBR );

    AGM_Segm* ps = new AGM_Segm(enTL, enBR);
    gm.objects.push_back(cv::Ptr<AGM_Segm>(ps));
  }
  else
  {
    Point xy = center( rect );
    GeoSheet& sh = gm.sheets[ cur_sheet ];
    Point2d en = sh.xy2en( xy );
    AGM_Point* pp = new AGM_Point( en );
    gm.objects.push_back(cv::Ptr<AGM_Point>(pp));
  }

  return true;
};
示例#2
0
void GeoMapEditor::update_title()
{
  if (gm.sheets.size() > 0 && cur_sheet>=0)
  {
    string text = format("Map [%d(%s)/%d] type=%s location=Nord:%f East:%f", 
      cur_sheet+1, gm.sheets[cur_sheet].sheet_name.c_str(), gm.sheets.size(), 
      objType().c_str(), // type
      location.y, location.x // location
      );
      //format("Map: %s [#%d of %d, %d msec]; type=%s objects on frame=%d sensitivity=%f tracking=%s", 
      //video_file_name.c_str(),
      //iframe, frames, frame_time, objType().c_str(), numobj, frameProc.sensitivity, tracking_object? "ON" : "OFF" );
    set_window_text( title.c_str(), text.c_str() );
  }
}
示例#3
0
文件: ndwin.c 项目: Orc/ndialog
/*
 * objAt() returns the x,y position of the upper right hand corner of the
 * object.
 */
int
objAt(void* obj, int* x, int* y)
{
    *x = *y = 0;

    if (obj == 0) {
	errno = EINVAL;
	return -1;
    }

    if (objType(obj) != O_BUTTON) {
	*x = OBJ(obj)->x;
	*y = OBJ(obj)->y;
    }

    return 0;
} /* objAt */
示例#4
0
int FrInteger::compare(const FrObject *obj) const
{
   if (!obj)
      return 1 ;     // anything is greater than NIL / empty-list
   if (!obj->numberp())
      return -1 ;    // sort all non-numbers after numbers
   else if (objType() < obj->objType())
      return -((FrNumber*)obj)->compare(this) ;
   else
      {
      long diff = intValue() - ((FrNumber*)obj)->intValue() ;
      if (diff < 0)
	 return -1 ;
      else if (diff > 0)
	 return +1 ;
      else
	 return 0 ;
      }
}
示例#5
0
bool GeoMapEditor::addMouseObject( // пытаемся добавить новый объект вытянув или кликнув мышкой
  std::vector< cv::Point >& pts, // note: in-out -- подкручиваем точки по законам первого рождения для данного объекта
  int flags )
{
  if (objType() == "AGM_Segm" && pts.size() > 1)
  {
    Point xyStart = pts[0];
    Point xyEnd = pts[1];
    GeoSheet& sh = gm.sheets[ cur_sheet ];
    Point2d enStart = sh.xy2en( xyStart );
    Point2d enEnd = sh.xy2en( xyEnd );

    AGM_Segm* ps = new AGM_Segm(enStart, enEnd);
    gm.objects.push_back(cv::Ptr<AGM_Segm>(ps));
    return true;
  }

  return __false("GeoMapEditor::addMouseObject(std::vector< cv::Point >& pts) not implemented");
};
示例#6
0
文件: ndwin.c 项目: Orc/ndialog
/*
 * drawList() draws a listbox
 */
void
drawList(void *o, void* w)
{
    Obj *obj = OBJ(o);
    int start, rc, idx;
    WINDOW *win = Window(w);
    int x = WX(w),
	y = WY(w);
    int currentitem = -1;

    if (obj == 0 || objType(obj) != O_LIST)
	return;
    rc = _nd_drawObjCommon(obj, w);
    _nd_adjustXY(rc, obj, &x, &y);

    start = obj->item.list.topy;

    if ((rc & DREW_A_BOX) && obj->width > 3) {
	if (start > 0) {
	    setcolor(win, WIDGET_COLOR);
	    mvwaddstr(win, y-1, x+obj->width-3, "(-)");
	}
	if (start+obj->depth < obj->item.list.nritems) {
	    setcolor(win, WIDGET_COLOR);
	    mvwaddstr(win, y+obj->depth, x+obj->width-3, "(+)");
	}
    }
    setcolor(win, WINDOW_COLOR);

    for (idx = start; idx-start < obj->depth; idx++) {
	if ((obj->item.list.cury == idx) &&
		(IS_CURRENT(obj) || (obj->flags & ALWAYS_HIGHLIT)))
	    currentitem = idx;
	else
	    drawListElement(obj,win,idx,y,x,start);
    }
    if (currentitem >= 0)
	drawListElement(obj,win,currentitem,y,x,start);
} /* drawList */
示例#7
0
文件: ndwin.c 项目: Orc/ndialog
/*
 * drawButton() draws a button.
 */
void
drawButton(void *obj, void *w)
{
    int highlight = 0;
    int boxcolor;
    int objcolor;
    WINDOW* win = Window(w);
    int x = WX(w),
	y = WY(w);

    if (obj == 0 || objType(obj) != O_BUTTON)
	return;

    x += OBJ(obj)->dtx;
    y += OBJ(obj)->dty;

    boxcolor = IS_CURRENT(obj) ? ACTIVE_COLOR : WINDOW_COLOR;
    objcolor = BUTTON_COLOR | (OBJ_READONLY(obj) ? READONLY_COLOR : 0);

    wmove(win, y, x-1);
    setcolor(win, boxcolor);
    waddch(win, '[');
    highlight = (OBJ(obj)->content && *((int*)(OBJ(obj)->content)) != 0);
    getyx(win,y,x);
    if (OBJ(obj)->flags & OBJ_CLICKED) {
	setcolor(win, PRESSED_COLOR);
	waddstr(win, OBJ(obj)->title);
    }
    else {
	setcolor(win, IS_CURRENT(obj) ? (objcolor|CURRENT_COLOR) : objcolor);
	waddstr(win,OBJ(obj)->title);
    }
    setcolor(win, boxcolor);
    waddch(win, ']');
    wmove(win,y,x);
} /* drawButton */
示例#8
0
//-----------------------------------------------------------------------------
StatusCode RootHistCnv::RConverter::createAddress(DataObject* pObj,
                                                  TDirectory* pDir,
                                                  TObject* pTObj,
                                                  IOpaqueAddress*& refpAddr)
//-----------------------------------------------------------------------------
{
  // Get address again....it does not change
  IRegistry* pReg = pObj->registry();
  if ( 0 != pReg )    {
    refpAddr = pReg->address();
    if ( 0 == refpAddr )    {
      refpAddr = new RootObjAddress(repSvcType(),
				    objType(),
				    pReg->name(),
				    "",
				    (unsigned long)(pDir),
 				    (unsigned long)(pTObj),
				    pTObj);

      return StatusCode::SUCCESS;
    }
  }
  return StatusCode::FAILURE;
}
// this implementation will be re-coded.
void CircuitDomDocumentExporter::exportCircuitTo(Circuit * _circuit, QIODevice * _device) {
    if (_circuit && _device){
        QDomDocument doc;
        QDomElement rootElement = doc.createElement("xml");
        QDomElement circuitElement = doc.createElement("circuit");
        
        QDomElement circuitUUIDElement = doc.createElement("uuid");
        circuitUUIDElement.appendChild(doc.createCDATASection(_circuit->getUUID()));
        circuitElement.appendChild(circuitUUIDElement);
        
        for (QMap<QString, Circuit::Object*>::const_iterator iter = _circuit->getObjectMap().begin(); iter != _circuit->getObjectMap().end(); ++iter) {
            Circuit::Object* obj = *iter;
            QDomElement circuitObjectElement = doc.createElement("object");
            QDomElement circuitObjectUUIDElement = doc.createElement("uuid");
            QDomElement circuitObjectTypeElement = doc.createElement("type");
            circuitObjectUUIDElement.appendChild(doc.createCDATASection(obj->getUUID()));

            circuitObjectElement.appendChild(circuitObjectUUIDElement);
            circuitObjectElement.appendChild(circuitObjectTypeElement);

            QString objType("OBJECT");
            if (obj->getType() == Circuit::Object::NODE) {
                objType = "NODE";
                Circuit::Node* node = static_cast<Circuit::Node*>(obj);
                
                //coordinate
                QDomElement circuitNodeXElement = doc.createElement("x");
                QDomElement circuitNodeYElement = doc.createElement("y");
                QDomElement circuitNodeZElement = doc.createElement("z");
                circuitNodeXElement.appendChild(doc.createCDATASection(QString("%1").arg(node->getX())));
                circuitNodeYElement.appendChild(doc.createCDATASection(QString("%1").arg(node->getY())));
                circuitNodeZElement.appendChild(doc.createCDATASection(QString("%1").arg(node->getZ())));
                circuitObjectElement.appendChild(circuitNodeXElement);
                circuitObjectElement.appendChild(circuitNodeYElement);
                circuitObjectElement.appendChild(circuitNodeZElement);
                
                //connections
                QDomElement circuitNodeConnectionsElement = doc.createElement("connections");
                for(QList<QString>::const_iterator iter = node->connectionList().begin();iter != node->connectionList().end();++iter) {
                    QDomElement circuitNodeConnectionsUUIDElement = doc.createElement("uuid");
                    circuitNodeConnectionsUUIDElement.appendChild(doc.createCDATASection(*iter));
                    circuitNodeConnectionsElement.appendChild(circuitNodeConnectionsUUIDElement);
                }
                circuitObjectElement.appendChild(circuitNodeConnectionsElement);
            }
            if (obj->getType() == Circuit::Object::ELEMENT) {
                objType = "ELEMENT";
                Circuit::Element* element = static_cast<Circuit::Element*>(obj);

                //coordinate
                QDomElement circuitElementXElement = doc.createElement("x");
                QDomElement circuitElementYElement = doc.createElement("y");
                QDomElement circuitElementZElement = doc.createElement("z");
                circuitElementXElement.appendChild(doc.createCDATASection(QString("%1").arg(element->getX())));
                circuitElementYElement.appendChild(doc.createCDATASection(QString("%1").arg(element->getY())));
                circuitElementZElement.appendChild(doc.createCDATASection(QString("%1").arg(element->getZ())));
                circuitObjectElement.appendChild(circuitElementXElement);
                circuitObjectElement.appendChild(circuitElementYElement);
                circuitObjectElement.appendChild(circuitElementZElement);
                
                //connections
                QDomElement circuitElementConnectionsElement = doc.createElement("connections");
                for(QList<QString>::const_iterator iter = element->connectionList().begin();iter != element->connectionList().end();++iter) {
                    QDomElement circuitElementConnectionsUUIDElement = doc.createElement("uuid");
                    circuitElementConnectionsUUIDElement.appendChild(doc.createCDATASection(*iter));
                    circuitElementConnectionsElement.appendChild(circuitElementConnectionsUUIDElement);
                }
                circuitObjectElement.appendChild(circuitElementConnectionsElement);
            }
            if (obj->getType() == Circuit::Object::CONNECTION) {
                objType = "CONNECTION";
                Circuit::Connection* connection = static_cast<Circuit::Connection*>(obj);
                
                //objects
                QDomElement circuitConnectionObjectsElement = doc.createElement("objects");
                for(QList<QString>::const_iterator iter = connection->objectList().begin();iter != connection->objectList().end();++iter) {
                    QDomElement circuitConnectionObjectsUUIDElement = doc.createElement("uuid");
                    circuitConnectionObjectsUUIDElement.appendChild(doc.createCDATASection(*iter));
                    circuitConnectionObjectsElement.appendChild(circuitConnectionObjectsUUIDElement);
                }
                circuitObjectElement.appendChild(circuitConnectionObjectsElement);
            }
            circuitObjectTypeElement.appendChild(doc.createCDATASection(objType));
            circuitElement.appendChild(circuitObjectElement);
        }
        
        rootElement.appendChild(circuitElement);
        doc.appendChild(rootElement);

        QTextStream out(_device);
        out << doc;
    }
}
示例#10
0
文件: ndwin.c 项目: Orc/ndialog
/*
 * _nd_drawObjCommon() draws the common parts of string, menu, list, and text
 * objects.  It returns a bitmap of what it drew:
 *
 *	rc & DREW_TITLE		-- drew a title
 *	rc & DREW_PREFIX	-- drew a prefix
 *	rc & DREW_SUFFIX	-- drew a suffix
 *	rc & DREW_A_BOX		-- drew a little box around where the data
 *				   is supposed to go.
 *
 */
int
_nd_drawObjCommon(void *o, void* w)
{
    Obj *obj = OBJ(o);
    int preflen;		/* length of any prefix */
    int sufflen;		/* length of any suffix */
    int status = 0;
    int boxcolor, objcolor;
    WINDOW *win = Window(w);
    int x = WX(w),
	y = WY(w);

    if (obj == 0)
	return 0;

    ADJUSTXY(obj, x, y);

    /* If we're part of a widget, we either return DREW_A_BOX if we've
     * got an (ignored) prefix or suffix or 0.
     */
    if (obj->parent != 0 && (obj->flags & OBJ_DRAW) == 0)
	return (obj->prefix || obj->suffix) ? DREW_A_BOX : 0;

    /* otherwise we draw like mad */
    boxcolor = IS_CURRENT(o) ? ACTIVE_COLOR : WINDOW_COLOR;
    objcolor = WINDOW_COLOR | (OBJ_READONLY(o) ? READONLY_COLOR : 0);

    preflen = obj->prefix ? strlen(obj->prefix) : 0;
    sufflen = obj->suffix ? strlen(obj->suffix) : 0;

    setcolor(win, objcolor);
    /* print any title */
    if (obj->title) {
	/* If we have a prefix or suffix, the data will be boxed, so
	 * don't forget to adjust the title position to account for
	 * the box frame.
	 */
	if (obj->prefix || obj->suffix)
	    wmove(win, y, x+preflen+1);
	else
	    wmove(win, y, x);
	waddstr(win, obj->title);
	status |= DREW_TITLE;
	y++;
    }
    /* print a box around the data field, if needed */
    if (obj->prefix || obj->suffix || objType(obj) == O_TEXT) {
	drawbox(win, y, x+preflen, obj->depth+2, obj->width+2, 0,
					boxcolor, boxcolor);
	status |= DREW_A_BOX;
	y++;
    }
    setcolor(win, objcolor);
    /* print any prefix */
    if (obj->prefix) {
	wmove(win, y, x);
	status |= DREW_PREFIX;
	waddstr(win, obj->prefix);
    }

    /* print any suffix */
    if (obj->suffix) {
	wmove(win, y, x+preflen+2+obj->width);
	waddstr(win, obj->suffix);
	status |= DREW_SUFFIX;
    }
    return status;
} /* _nd_drawObjCommon */
示例#11
0
int GeoMapEditor::processMouseEvent(int event, int x, int y, int flags)
{
  //switch (mouseScenario)
  //{

  //}

  //cout << "event=" << event << " coords=" << x << " " << y << " flags=" << flags << endl;

  string objtype = objType(); // тип объекта, с которым работаем
  bool object_poligonal = (objtype == "AGM_Segm" );
  ///bool object_segment_based = (objtype == "AFO_Segm"); // либо производные двух точечные отрезкообразные
  cv::Point curPoint(x,y);
  int max_poly_points=1000;
  if (objtype == "AGM_Segm")
    max_poly_points=2;

  //cout << "GeoMap:objtype" << objtype << endl;

  switch (event)
  {
    case CV_EVENT_LBUTTONDOWN   : // =1,0,
    case CV_EVENT_RBUTTONDOWN   : // =1,0,
      if (object_poligonal)
      {
        if ( rubbering_pts.size() == 0 ) // первая точка
        {
          rubbering_pts.push_back(curPoint);
          rubbering_pts.push_back(curPoint); // создали вырожденный первый сегмент, вторую точку будем корректировать на mousemove 
          rubbering_mode = RUBBERING_SEGMENT;
        }
        else
//           if (rubbering_pts.size()>=2 && // если последний сегмент не вырожденный -- начнем новый
//           l2norm( rubbering_pts[rubbering_pts.size()-2], rubbering_pts[rubbering_pts.size()-1] ) >= 25  )
        {
          rubbering_pts.push_back(curPoint);
          rubbering_mode = RUBBERING_SEGMENT;
        }             
      }
      else
      {
        rubbering_pts.clear();
        rubbering_pts.push_back(curPoint);
        rubbering_pts.push_back(curPoint); // создали вырожденный ректангл 
        rubbering_mode = RUBBERING_RECTANGLE; // пока так, грубо.
      }
      rubber_by_left_button = (event == CV_EVENT_LBUTTONDOWN);
      return finishMouseEvent();

    case CV_EVENT_MOUSEMOVE     : // =0,
      if (rubbering_mode == RUBBERING_NOTHING)
        break;
      if (rubbering_mode == RUBBERING_RECTANGLE)
      {
        assert(rubbering_pts.size() == 2);
        rubbering_pts[1] = curPoint; // обновили точку
        return finishMouseEvent();
      }
      if (rubbering_mode == RUBBERING_SEGMENT)
      {
        assert(rubbering_pts.size() >=2);
        ////if (rubbering_pts.size() == 2) 
          rubbering_pts.back() = curPoint; // обновили точку
        return finishMouseEvent();
      }
//       if (rubbering_mode == RUBBERING_POLYGON) // уже вытянута часть многоугольника, и мы свободно водим мышкой планируя начать вытягивать следующее ребро многоугольника
//       {
//         assert(rubbering_pts.size() >=2);
//         // ничего не делаем, пока выбор пользователя не понятен и отрисовка не меняется
//         //return 0;
//         rubbering_pts.back() = curPoint;
//         return finishMouseEvent();
//       }

    //case CV_EVENT_RBUTTONDOWN   : // =2,
    //case CV_EVENT_MBUTTONDOWN   : // =3,
    case CV_EVENT_LBUTTONUP     : // =4,
    case CV_EVENT_RBUTTONUP     : // =4,
      if (rubbering_mode == RUBBERING_NOTHING)
        break;
      if (rubbering_mode == RUBBERING_RECTANGLE) 
      {
        assert(rubbering_pts.size() == 2);
        rubbering_pts[1] = curPoint; // скорректировали
        cv::Rect rect(rubbering_pts[0], rubbering_pts[1]);
        //cout << "rect.x =" << rect.x << " rect.y =" << rect.y;
        //cout << "rect.width =" << rect.width << " rect.height =" << rect.height << endl;
        int flags = ADD_OBJECT_RECT | (rubber_by_left_button ? ADD_OBJECT_MOUSE_LEFT : ADD_OBJECT_MOUSE_RIGHT);
        rubbering_mode = RUBBERING_NOTHING;
        rubbering_pts.clear();
        return addMouseObject(rect, flags);
      }

      if (rubbering_mode == RUBBERING_SEGMENT)
      {
        assert(rubbering_pts.size() >= 2);
        rubbering_pts.back() = curPoint;
//         if ( l2norm( rubbering_pts[0], curPoint) < 100 // замкнули или просто клик был. конец банкета
//           //////||
//           //////  (object_segment_based && rubbering_pts.size() == 2 )
//           || rubbering_pts.size() == max_poly_points+1
//             ) 
//         {
//           if (rubbering_pts.size() > 2)
//             rubbering_pts.back() = rubbering_pts[0]; // скорректировали последнюю точку прилепив к начальной
//           int flags = ADD_OBJECT_RECT | (rubber_by_left_button ? ADD_OBJECT_MOUSE_LEFT : ADD_OBJECT_MOUSE_RIGHT);
//           if (l2norm( rubbering_pts[rubbering_pts.size()-2], rubbering_pts[rubbering_pts.size()-1] ) < 25)
//           { // удаляем последнее ребро если оно вырожденное
//             rubbering_pts[rubbering_pts.size()-2] = rubbering_pts[0];
//             rubbering_pts.pop_back();
//           }
//           rubbering_mode = RUBBERING_NOTHING;
//           int res = addMouseObject(rubbering_pts, flags);
//           rubbering_pts.clear();
//           return res;
//         }        
        rubbering_mode = RUBBERING_NOTHING;
        int res = addMouseObject(rubbering_pts, flags);
        rubbering_pts.clear();
        return res;
//         }
        // не замкнулись, продолжаем, надо перерисовать
//         rubbering_pts.back() = curPoint;
//         rubbering_mode = RUBBERING_POLYGON;

//        return finishMouseEvent();
      }
      break;
    //case CV_EVENT_RBUTTONUP     : // =5,
    //case CV_EVENT_MBUTTONUP     : // =6,
    //case CV_EVENT_LBUTTONDBLCLK : // =7,
    //case CV_EVENT_RBUTTONDBLCLK : // =8,
    //case CV_EVENT_MBUTTONDBLCLK : // =9
  }
  return finishMouseEvent();
}